Как сложить дату или вычесть из даты( минуты, часы, дни, месяца, годы)

Приветствую всех. Сегодня рассмотрим примеры того как можно без труда из существующей даты вычесть отрезок времени или наоборот его сложить. Представим что у нас есть текущая дата:

DateTime date = DateTime.Now;
Console.WriteLine(date);
//19.05.2018 8:50:00

Чтобы нам добавить к текущей дате 5 часов и один день используем методы:

AddHours метод добавление часов

AddDays метод добавления дней.

  DateTime date = DateTime.Now;
  Console.WriteLine(date);

  date= date.AddHours(5);
  date= date.AddDays(1);

  Console.WriteLine(date);

//19.05.2018 9:00:05
//20.05.2018 14:00:05

По аналогии можно произвести эти манипуляции и с секундами, минутами, месяцами и годами использовав лишь другие методы:

 date.AddSeconds(1);
 date.AddMinutes(1);
 date.AddMonths(1);
 date.AddYears(1);

Со сложением временного интервала вроде как ничего сложного нет, и вопросов возникнуть не должно. Однако перейдем ко второй части, а именно с вычитанием даты. Так такого метода вычитание даты из даты не существует. Однако он все же есть, только возвращает текущую разницу  не совсем в привычной форме восприятия по смотрим пример:

     DateTime date = DateTime.Now;
     Console.WriteLine(date);
     DateTime date2 = new DateTime(2017, 2, 20, 13, 20, 15);
     Console.WriteLine(date.Subtract(date2));
     // 19.05.2018 9:06:29
     //   452.19:46:14.5344899

Воспринимать такое лично для меня не совсем логично, где разность приведена в днях и часах.

Однако есть куда лучший способ произвести разность даты и получить ее в простом понимании для нас.

DateTime date = DateTime.Now;
Console.WriteLine(date);

date= date.AddHours(-5);
date= date.AddDays(-1);

Console.WriteLine(date);
// 19.05.2018 9:11:39
//18.05.2018 4:11:39

Таким образом мы использовали те же методы что и для добавления интервала времени. Но при расчете вычисления разности мы добавили лишь отрицательное значения в метод. Тем самым произвели разность даты.

Обновлено: 19.05.2018 — 09:15

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.