Типы DateOnly и TimeOnly в C#

В .NET 6 для работы с датой и временем, наряду с уже существующей структурой DateTime, были добавлены две новых структуры — DateOnly и TimeOnly, которые представляют, соответственно, день в году и время. Рассмотрим эти структуры подробнее.

Структура DateOnly

Структура DateOnly представляет даты в диапазоне от 1 января 0001 г. общей эры до 31 декабря 9999 г. по григорианскому календарю. DateOnly предоставляет только дату и идеально подойдет для работы с днями рождения, юбилеями и прочими датами, которые не привязаны к конкретному времени суток. Например:

DateOnly dateOnly2 = new DateOnly(2021, 12, 31);
DateTime dateTime = new DateTime(2021, 12, 31);

Console.WriteLine($"DateOnly: {dateOnly2}");
Console.WriteLine($"DateTime: {dateTime}");
DateOnly: 31.12.2021
DateTime: 31.12.2021 0:00:00

Обратите внимание, что в случае использования DateOnly, в выходной строке в консоли отсутствуют значения времени. В целом, методы и свойства структуры DateOnly походи на методы и свойства DateTime, касающиеся работы с датами, т.е. мы также можем прибавить к дате день, месяц, год или узнать день в году и так далее. При этом также присутствует ряд методом и свойств характерных именно для DateOnly.

Метод FromDateTime(DateTime)

Метод FromDateTime возвращает экземпляр DateOnly для даты, определенной в параметре метода как DateTime. Например:

DateTime dateTime = new DateTime(2021, 12, 31, 23, 59, 59);
DateOnly dateOnly = DateOnly.FromDateTime(dateTime);


Console.WriteLine($"DateTime: {dateTime}");
Console.WriteLine($"DateOnly: {dateOnly}");
DateTime: 31.12.2021 23:59:59
DateOnly: 31.12.2021

Метод FromDayNumber(Int32)

Метод FromDayNumber создает экземпляр DateOnly на указанное число дней. Здесь стоит учитывать, что отсчёт начинается с даты 01.01.0001, например:

DateOnly dateOnly = DateOnly.FromDayNumber(256);
Console.WriteLine($"DateOnly: {dateOnly}");
DateOnly: 14.09.0001

В 0001 году 256-й день приходился на 14 сентября.

Структура TimeOnly

Структура TimeOnly предназначена для работы только со временем — конкретным моментом в сутках. Этот тип данных удобно использовать, например, для указания времени регулярных встреч или времени срабатывания будильника и так далее, то есть таких значений, которые не зависят от конкретной даты. Как и в случае с DateOnly, мы можем получить значение времени из объекта типа DateTime или создать объект TimeOnly, используя один из его конструкторов. Например:

DateTime dateTime = DateTime.Now;

TimeOnly timeOnly = TimeOnly.FromDateTime(dateTime);
TimeOnly timeOnly1= new TimeOnly();
TimeOnly timeOnly2 = new TimeOnly(23,59);
TimeOnly timeOnly3 = new TimeOnly(23, 59, 59);

Console.WriteLine(timeOnly);
Console.WriteLine(timeOnly1); 
Console.WriteLine(timeOnly2);
Console.WriteLine(timeOnly3);
20:02
0:00
23:59
23:59

Как и в случае работы с DateTime мы можем прибавлять к значению TimeOnly часы, минуты или секунды. Используя TimeOnly мы можем определить, находится ли время в указанном интервале, комбинировать DateOnly и TimeOnly, чтобы вернуть значение DateTime или же получить значение времени из объекта типа DateTime, как это было показано в примере выше.

Метод IsBetween(TimeOnly, TimeOnly)

Метод IsBetween позволяет определить находится ли указанное значение времени в заданном интервале. Например:

DateTime dateTime = DateTime.Now;
TimeOnly timeOnly = TimeOnly.FromDateTime(dateTime);

TimeOnly t1 = new TimeOnly(21,59);
TimeOnly t2 = new TimeOnly(23, 59, 59);

if (timeOnly.IsBetween(t1, t2))
    Console.WriteLine($"Время {timeOnly} находится в интервале от {t1} до {t2}");
else
    Console.WriteLine($"Время {timeOnly} Не находится в интервале от {t1} до {t2}");

Здесь мы создали экземпляр TimeOnly из текущего значения даты и времени DateTime и проверили вхождение переменной timeOnly в интервал значений от t1 до t2. Результат:

Время 20:13 Не находится в интервале от 21:59 до 23:59

Итого

В .NET 6 для работы с датой и временем появилось две новые структуры — DateOnly и TimeOnly. Во многом, эти структуры похожи на уже известный нам тип данных DateTime, однако предоставляются нам возможность работать по отдельности либо с датой, либо со временем.

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