Работа с датой и временем в C# (DateTime)

Работа с датой и временем в C#, в основном, проводится с использованием структуры DateTime.  Сегодня мы рассмотрим, что из себя представляет структура DateTime и каким образом мы можем её использовать при работе с датами и временем в C#.

Про новые возможности работы с датой и временем в .NET 6 можно узнать в статье «Типы DateOnly и TimeOnly в C#«

Создание объекта для хранения даты и времени в C#

Для создания объекта типа DateTime мы можем воспользоваться одним из конструкторов структуры:

public DateTime()
public DateTime(int year, int month, int day)
public DateTime(int year, int month, int day, Calendar calendar)
public DateTime(int year, int month, int day, int hour, int minute, int second)
public DateTime(int year, int month, int day, int hour, int minute, int second, DateTimeKind kind)
public DateTime(int year, int month, int day, int hour, int minute, int second, Calendar calendar)
public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond)
public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, DateTimeKind kind)
public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar)
public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar, DateTimeKind kind)
public DateTime(long ticks)
public DateTime(long ticks, DateTimeKind kind)

Например:

DateTime empty = new DateTime();
DateTime date = new DateTime(2021,09,11);
DateTime dateTime = new DateTime(2021, 09, 11, 10, 59, 59);

Console.WriteLine(empty);
Console.WriteLine(date);
Console.WriteLine(dateTime);

В результате получим следующий вывод консоли:

01.01.0001 0:00:00
11.09.2021 0:00:00
11.09.2021 10:59:59

В первом случае мы использовали конструктор по умолчанию и получили минимально возможную дату и время, во втором случае мы задали только дату и в третьем — дату и время.

При этом, если необходимо получить текущие значения даты и времени в C#, то можно воспользоваться следующими свойствами DateTime:

DateTime now = DateTime.Now;//текущие дата и время  
DateTime nowUtc = DateTime.UtcNow; //текущие дата и время в UTC
DateTime dateUtc = DateTime.Today; //текущая дата

Console.WriteLine($"Now: {now}");
Console.WriteLine($"nowUtc: {nowUtc}");
Console.WriteLine($"Today {dateUtc}");
Now: 09.11.2021 19:27:16
nowUtc: 09.11.2021 13:27:16
Today 09.11.2021 0:00:00

Работа с DateTime в C#

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

Как в C# получить из DateTime только дату или только время?

Для того, чтобы получить из объекта типа DateTime только дату или только время, необходимо воспользоваться его свойствами Date или TimeOfDay:

DateTime now = DateTime.Now;//текущие дата и время  

Console.WriteLine($"Дата и время: {now}");
Console.WriteLine($"Дата: {now.Date}"); 
Console.WriteLine($"Время: {now.TimeOfDay}");
Дата и время: 09.11.2021 19:33:08
Дата: 09.11.2021 0:00:00
Время: 19:33:08.3884058

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

Как в C# получить из DateTime порядковый номер дня в году?

Чтобы получить порядковый номер дня в году, необходимо использовать свойство DayOfYear:

DateTime now = new DateTime(2021, 09, 13);
int day = now.DayOfYear;
if (day == 256)
    Console.WriteLine($"День: {day}. Сегодня День программиста!");
День: 256. Сегодня День программиста!

Также, можно воспользоваться другими свойствами Day.., чтобы получить порядковые номера дня:

DateTime now = new DateTime(2021, 09, 13);
Console.WriteLine($"Порядковый номер дня в неделе: {(int)now.DayOfWeek}");
Console.WriteLine($"Порядковый номер дня в месяце: {now.Day}");
Console.WriteLine($"Порядковый номер дня в году: {now.DayOfYear}");

Свойство DayOfWeek представляет собой тип enum (перечисление), которое может принимать следующие значения:

public enum DayOfWeek
{
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
}

Как в C# добавить к текущей дате/времени секунду, минуту, час и т.д.?

Структура DateTime содержит ряд методов, позволяющих манипулировать значениями даты и времени:

public DateTime Add(TimeSpan value)
public DateTime AddDays(double value)
public DateTime AddHours(double value)
public DateTime AddMilliseconds(double value)
public DateTime AddMinutes(double value)
public DateTime AddMonths(int months)
public DateTime AddSeconds(double value)
public DateTime AddTicks(long value)
public DateTime AddYears(int value)

Обратите внимание, что большинство параметров в этих методах имеют тип данных double, что, технически, позволяет нам прибавлять к значениям даты и времени, например пол дня или пол часа:

DateTime now = new DateTime(2021, 09, 13);

Console.WriteLine($"Прибавим 1 день: {now.AddDays(1)}");
Console.WriteLine($"Прибавим пол часа: {now.AddHours(0.5)}");
Console.WriteLine($"Прибавим один год: {now.AddYears(1)}");
Прибавим 1 день: 14.09.2021 0:00:00
Прибавим пол часа: 13.09.2021 0:30:00
Прибавим один год: 13.09.2022 0:00:00
При необходимости, мы можем передавать в методы Add... и отрицательные значения — тип double это позволяет. В результате мы будем не прибавлять, а отнимать определенное значение из DateTime

Как в C# от одного значения DateTime отнять другое значение DateTime?

Для вычитания из одного объекта DateTime другого объекта DateTime можно воспользоваться методом Subtract:

DateTime date1 = new DateTime(2021, 09, 13);
DateTime date2 = new DateTime(2020, 09, 13); //дата на год меньше
Console.WriteLine($"date1.Subtract: {date1.Subtract(date2)}");

Результатом выполнения метода Subtract является объект типа TimeSpan. В результате получим:

date1.Subtract: 365.00:00:00

Форматирование дат в C#

Структура DateTime также содержит ряд методом, позволяющих форматировать значение DateTime и получать результат в виде строки:

DateTime date = DateTime.Now;

Console.WriteLine(date.ToLongDateString());
Console.WriteLine(date.ToLongTimeString());
Console.WriteLine(date.ToShortDateString());
Console.WriteLine(date.ToShortTimeString());
9 ноября 2021 г.
20:41:31
09.11.2021
20:41

Форматирование даты и времени в C# с использованием различных описателей формата рассмотрено в этой статье.

Итого

Сегодня мы познакомились с новым типом данных в C# — структурой DateTime, которая предназначена для работы с датой и временем. DateTime позволяет создавать объекты даты и времени в C#, прибавлять и отнимать от даты и времени значения, например, уменьшать текущую дату на день, месяц, год и так далее. Однако на DateTime работа с датой и временем не заканчивается, поэтому в дальнейшем мы рассмотрим и другие классы C#, предназначенные для определения и манипуляции значениями даты и времени в C#.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии