Содержание
В .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}");
DateTime: 31.12.2021 0:00:00
Обратите внимание, что в случае использования DateOnly, в выходной строке в консоли отсутствуют значения времени. В целом, методы и свойства структуры DateOnly походи на методы и свойства DateTime, касающиеся работы с датами, т.е. мы также можем прибавить к дате день, месяц, год или узнать день в году и так далее. При этом также присутствует ряд методом и свойств характерных именно для DateOnly.
Метод From Date Time(Date Time)
Метод From возвращает экземпляр 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}");
DateOnly: 31.12.2021
Метод From Day Number(Int32)
Метод From создает экземпляр DateOnly на указанное число дней. Здесь стоит учитывать, что отсчёт начинается с даты 01.01.0001, например:
DateOnly dateOnly = DateOnly.FromDayNumber(256);
Console.WriteLine($"DateOnly: {dateOnly}");
В 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);
0:00
23:59
23:59
Как и в случае работы с DateTime мы можем прибавлять к значению TimeOnly часы, минуты или секунды. Используя TimeOnly мы можем определить, находится ли время в указанном интервале, комбинировать DateOnly и TimeOnly, чтобы вернуть значение DateTime или же получить значение времени из объекта типа DateTime, как это было показано в примере выше.
Метод Is Between(Time Only, Time Only)
Метод Is позволяет определить находится ли указанное значение времени в заданном интервале. Например:
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. Результат:
Итого
В .NET 6 для работы с датой и временем появилось две новые структуры — DateOnly и TimeOnly. Во многом, эти структуры похожи на уже известный нам тип данных DateTime, однако предоставляются нам возможность работать по отдельности либо с датой, либо со временем.