Для работы с датами и временем в .NET нам нужно использовать структуру DateTime. Он представляет дату и время с 00:00:00 1 января 0001 г. до 23:59:59 31 декабря 9999 г.
Вы также можете использовать конструктор для создания нового объекта DateTime. Пустой конструктор создает начальную дату:
1 DateTime dateTime = new
DateTime();
2 Console.WriteLine(dateTime); // 01.01.0001
То есть мы получим минимально возможное значение, которое также можно получить следующим образом:
1 Console.WriteLine(DateTime.MinValue);
Для установки конкретной даты необходимо использовать один из конструкторов, принимающих параметры:
1 DateTime date1 = new
DateTime(2022, 08, 28); // year - month - day
2 Console.WriteLine(date1); // 28.08.2022
Установка времени:
1 DateTime date1 = new
DateTime(2022, 8, 28, 18, 30, 25); // year- month - day - hour - minute - second
2 Console.WriteLine(date1); // 28.08.2022 15:32:49
Если вы хотите получить текущее время и дату, вы можете использовать ряд свойств DateTime:
1 Console.WriteLine(DateTime.Now);
2 Console.WriteLine(DateTime.UtcNow);
3 Console.WriteLine(DateTime.Today);
Вывод консоли:
28.08.2022 11:43:33 28.08.2022 8:43:33 28.08.2022 0:00:00
Свойство DateTime.Now принимает текущую дату и время компьютера, DateTime.UtcNow — дату и время относительно среднего времени по Гринвичу (GMT), а DateTime.Today — только текущую дату.
При работе с датами имейте в виду, что по умолчанию для представления дат используется григорианский календарь. Но что произойдет, если мы захотим получить день недели для 5 октября 1582 года:
1 DateTime someDate = new
DateTime(1582, 10, 5);
2 Console.WriteLine(someDate.DayOfWeek)
Консоль выделит значение вторника. Однако, как может быть известно из истории, первый переход с юлианского календаря на григорианский произошел в октябре 1582 года. Затем после даты 4 октября (четверг) (по юлианскому календарю) сразу перешли на 15 октября (пятница) (по григорианскому календарю). Так что, по факту, 10 дней было скинуто. То есть после 4 октября было 15 октября.
В большинстве случаев этот факт вряд ли повлияет на расчеты, но при работе с очень старыми датами этот аспект следует учитывать.
Операции с DateTime
Основные операции со структурой DateTime связаны со сложением или вычитанием дат. Например, вам нужно прибавить или вычесть несколько дней к дате.
Для добавления дат используется ряд методов:
• Добавить(значение TimeSpan): добавляет к дате значение TimeSpan.
• AddDays(двойное значение): добавляет несколько дней к текущей дате.
• AddHours(двойное значение): добавляет несколько часов к текущей дате.
•AddMinutes(двойное значение): добавляет несколько минут к текущей дате.
• AddMonths(int value): добавляет несколько месяцев к текущей дате.
• AddYears(int value): добавляет несколько лет к текущей дате.
Например, добавьте 3 часа к какой-либо дате:
1 DateTime date1 = new
DateTime(2022, 8, 28, 18, 30, 25); // 28.08.2022 18:30:25
2 Console.WriteLine(date1.AddHours(3)); // 28.08.2022 21:30:25
Метод Subtract(DateTime date) используется для вычитания дат:
1 DateTime date1 = new
DateTime(2022, 8, 28, 18, 30, 25); // 28.08.2022 18:30:25
2 DateTime date2 = new
DateTime(2022, 8, 28, 15, 30, 25); // 28.08.2022 15:30:25
3 Console.WriteLine(date1.Subtract(date2)); // 03:00:00
Здесь даты отличаются на три часа, поэтому результат «03:00:00».
Метод Substract не позволяет отдельно вычитать дни, часы и т. д. Но в этом нет необходимости, потому что мы можем передавать отрицательные значения в метод AddDays() и другие методы добавления:
1 // subtract three hours
2 DateTime date1 = new
DateTime(2022, 8, 28, 18, 30, 25); // 28.08.2022 18:30:25
3 Console.WriteLine(date1.AddHours(-3)); // 28.08.2022 15:30:25
Помимо операций сложения и вычитания, существует ряд методов форматирования даты:
1 DateTime date1 = new
DateTime(2022, 8, 28, 18, 30, 25);
2 Console.WriteLine(date1.ToLocalTime()); // 28.08.2022 21:30:25
3 Console.WriteLine(date1.ToUniversalTime()); // 28.08.2022 15:30:25
4 Console.WriteLine(date1.ToLongDateString()); // August 28th 2022
5 Console.WriteLine(date1.ToShortDateString()); // 28.08.2022
6 Console.WriteLine(date1.ToLongTimeString()); // 18:30:25
7 Console.WriteLine(date1.ToShortTimeString()); // 18:30