Полное руководство по языку программирования С# 14 и платформе .NET 10 / Работа с датами и временем

DateOnly и TimeOnly

Начальный ⏱ 5 мин чтения 👁 2 🕓 обновлено 11.08.2026

Для упрощения работы с датами и временем в .NET 6 были добавлены две дополнительные структуры - DateOnly и TimeOnly.

DateOnly

Структура DateOnly представляет дату. Для создания структуры можно использовать ряд ее конструкторов.


DateOnly()
DateOnly(int year, int month, int day)
DateOnly(int year, int month, int day, System.Globalization.Calendar calendar)

При использовании конструктора без параметров структура инициализируется датой 01.01.0001:


DateOnly someDate = new DateOnly();
Console.WriteLine(someDate); // 01.01.0001

Вторая версия конструктора принимает год, месяц и число, которыми инициализируется структура:


DateOnly someDate = new DateOnly(2022,1,6); // 6 января 2022 года
Console.WriteLine(someDate); // 06.01.2022

Третья версия конструктора в дополнение к году, месяцу и числу, также принимает объект календаря - объект System.Globalization.Calendar, относительно которого будет расcчитываться дата. Класс Calendar является абстрактным, но .NET предоставляет ряд встроенных типов календарей. Например, расcчитаем дату относительно юлианского календаря:


using System.Globalization;

DateOnly julianDate = new DateOnly(2022,1,6, new JulianCalendar());
Console.WriteLine(julianDate); // 19.01.2022

В данном случае для .NET переданная в конструктор дата - 06.01.2022 расценивается как дата юлианского календаря. При выводе на консоль мы видим тот же день только относительно григорианского календаря.

Свойства DateOnly

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

  • Day: возвращает день даты

  • DayNumber: возвращает количество прошедших дней с 1 января 0001 года относительно григорианского календаря

  • DayOfWeek: возвращает день недели

  • DayOfYear: возвращает день года

  • MaxValue: возвращает максимально возможную дату (статическое свойство)

  • MinValue: возвращает самую раннюю возможную дату (статическое свойство)

  • Month: возвращает месяц

  • Year: возвращает год

Применение свойств:


DateOnly now = new DateOnly(2022,1,6);
Console.WriteLine(now.Day);         // 6
Console.WriteLine(now.DayNumber);   // 738160
Console.WriteLine(now.DayOfWeek);   // Thursday
Console.WriteLine(now.DayOfYear);   // 6
Console.WriteLine(now.Month);       // 1
Console.WriteLine(now.Year);        // 2022

Методы DateOnly

С помощью методов DateOnly можно производить некоторые операции с датами. Некоторые из них:

  • AddDays(int days): добавляет к дате некоторое количество дней

  • AddMonths(int months): добавляет к дате некоторое количество месяцев

  • AddYears(int years): добавляет к дате некоторое количество лет

  • ToDateTime(TimeOnly): возвращает объект DateTime, который в качестве даты исппользует текущий объект DateOnly, а в качестве времени - значение параметра в виде TimeOnly

  • ToLongDateString(): выводит текущий объект DateOnly в виде подробной даты

  • ToShortDateString(): выводит текущий объект DateOnly в виде сжатой даты

Также в классе есть ряд статических методов. Некоторые из них:

  • FromDateTime(DateTime dateTime): на основе значения DateTime, переданного через параметр, создает и возвращает объект DateOnly

  • FromDayNumber(int days): на основе количества дней создает и возвращает объект DateOnly

  • Parse(string date): конвертирует строковое представление даты в объект DateOnly

  • ParseExact(string date, string format): конвертирует строковое представление даты в объект DateOnly, применяя определенный формат

  • TryParse(String, DateOnly): конвертирует строковое представление даты в объект DateOnly. При успешной конвертации возвращает true, а параметр типа DateOnly содержит созданную дату

  • TryParseExact(String, String, DateOnly): конвертирует строковое представление даты в объект DateOnly, применяя определенный формат. При успешной конвертации возвращает true, а параметр типа DateOnly содержит созданную дату

Пример некоторых операций:


DateOnly now = DateOnly.Parse("06.01.2022");    // на русскоязычной локализованной ОС
Console.WriteLine(now); // 06.01.2022
now = now.AddDays(1);   // 07.01.2022
now = now.AddMonths(4); // 07.05.2022
now = now.AddYears(-1); // 07.05.2021
Console.WriteLine(now.ToShortDateString());  // 07.05.2021
Console.WriteLine(now.ToLongDateString());   // 7 мая 2021 г.

TimeOnly

Структура TimeOnly представляет время в диапазоне от 00:00:00 до 23:59:59.9999999. Для создания структуры можно использовать ряд ее конструкторов.


TimeOnly()
TimeOnly(long ticks)
TimeOnly(int hour, int minute)
TimeOnly(int hour, int minute, int second)
TimeOnly(int hour, int minute, int second, int millisecond)

При использовании конструктора без параметров структура инициализируется временем 0.00:


TimeOnly time = new TimeOnly();
Console.WriteLine(time); // 0:00

Дополнительно с помощью других версий конструктора можно установить количество часов, минут, секунд и миллисекунд:


TimeOnly time1 = new TimeOnly(4, 30);
Console.WriteLine(time1);   // 4: 30

TimeOnly time2 = new TimeOnly(14, 23, 30);
Console.WriteLine(time2);   // 14: 23

Свойства TimeOnly

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

  • Hour: возвращает количество часов

  • Minute: возвращает количество минут

  • Second: возвращает количество секунд

  • Millisecond: возвращает количество миллисекунд

  • Ticks: возвращает количество тиков

  • MaxValue: возвращает максимально возможное время (статическое свойство)

  • MinValue: возвращает минимально возможное время (статическое свойство)

Применение свойств:


TimeOnly time = new TimeOnly(14, 23, 30);
Console.WriteLine(time.Hour);       // 14
Console.WriteLine(time.Minute);     // 23
Console.WriteLine(time.Second);     // 30

Методы TimeOnly

С помощью методов TimeOnly можно производить некоторые операции с временем. Некоторые из них:

  • AddHours(double hours): добавляет к времени некоторое количество часов

  • AddMinutes(double minutes): добавляет к времени некоторое количество минут

  • Add(TimeSpan value): добавляет время из объекта TimeSpan

  • ToLongTimeString(): выводит текущий объект TimeOnly в виде подробного времени

  • ToShortTimeString(): выводит текущий объект TimeOnly в виде сжатого времени

Также в классе есть ряд статических методов. Некоторые из них:

  • FromDateTime(DateTime dateTime): на основе значения DateTime, переданного через параметр, создает и возвращает объект TimeOnly

  • FromTimeSpan(TimeSpan value): на основе объекта TimeSpan создает и возвращает объект TimeOnly

  • Parse(string time): конвертирует строковое представление времени в объект TimeOnly

  • ParseExact(string timee, string format): конвертирует строковое представление времени в объект TimeOnly, применяя определенный формат

  • TryParse(string time, TimeOnly result): конвертирует строковое представление времени в объект TimeOnly. При успешной конвертации возвращает true, а параметр типа TimeOnly содержит сконвертированное время

  • TryParseExact(string time, string format, TimeOnly result): конвертирует строковое представление времени в объект TimeOnly, применяя определенный формат. При успешной конвертации возвращает true, а параметр типа TimeOnly содержит сконвертированное время

Пример некоторых операций:


TimeOnly time = TimeOnly.Parse("06:33:22");
Console.WriteLine(time);        // 6:33
time = time.AddHours(1);        // 7:33
time = time.AddMinutes(-23);   // 7:10

Console.WriteLine(time.ToShortTimeString());  // 7:10
Console.WriteLine(time.ToLongTimeString());   // 7:10:22

Проверь себя

📋 Тест по теме «DateOnly и TimeOnly» Тест по теме

Практические задания

Лёгкое Ручная проверка Заполните пропуск в коде (1)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

_____()
DateOnly(int year, int month, int day)
DateOnly(int year, int month, int day, System.Globalization.Calendar calendar)
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

DateOnly _____ = new DateOnly();
Console.WriteLine(someDate); // 01.01.0001
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

DateOnly someDate = _____ DateOnly(2022,1,6); // 6 января 2022 года
Console.WriteLine(someDate); // 06.01.2022
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

using System.Globalization;

DateOnly _____ = new DateOnly(2022,1,6, new JulianCalendar());
Console.WriteLine(julianDate); // 19.01.2022
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

DateOnly now = new DateOnly(_____,1,6);
Console.WriteLine(now.Day);         // 6
Console.WriteLine(now.DayNumber);   // 738160
Console.WriteLine(now.DayOfWeek);   // Thursday
Console.WriteLine(now.DayOfYear);   // 6
Console.WriteLine(now.Month);       // 1
Console.WriteLine(now.Year);        // 2022
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (1)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

DateOnly()
DateOnly(int year, int month, int _____)
DateOnly(int year, int month, int day, System._____.Calendar calendar)
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

DateOnly someDate = _____ DateOnly();
Console._____(someDate); // 01.01.0001
Войдите, чтобы отправить решение
Среднее Ручная проверка Расставьте строки кода в правильном порядке
+20 XP

Строки кода из примера этого урока перемешаны. Впишите их в правильном порядке, каждую строку — с новой строки.

DateOnly(int year, int month, int day, System.Globalization.Calendar calendar)
DateOnly(int year, int month, int day)
DateOnly()
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «DateOnly и TimeOnly»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «DateOnly и TimeOnly», и предложите одно осмысленное изменение (например, другое входное значение или дополнительное условие). Приведите итоговый код.

DateOnly()
DateOnly(int year, int month, int day)
DateOnly(int year, int month, int day, System.Globalization.Calendar calendar)
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «DateOnly и TimeOnly»
+30 XP

Изучите приведённый фрагмент кода и опишите, при каких входных данных или условиях он может сработать не так, как ожидается (граничный случай, отсутствие проверки и т.п.). Предложите исправленный вариант.

DateOnly someDate = new DateOnly();
Console.WriteLine(someDate); // 01.01.0001
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «DateOnly и TimeOnly»
+50 XP

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

Войдите, чтобы отправить решение
Домашнее задание Ручная проверка Домашнее задание по теме «DateOnly и TimeOnly»
+25 XP

Напишите собственную небольшую программу, применяющую материал темы «DateOnly и TimeOnly». Используйте не менее одной конструкции, показанной в примерах урока. Прикрепите код решения и краткое описание того, что он делает.

Войдите, чтобы отправить решение

Обсуждение (0)

Войдите, чтобы оставить комментарий.