English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# базовый курс

C# продвинутый курс

C# ориентирован на объекты (OOP)

C# дата и время (DateTime)

C# включает структуру DateTime для обработки дат и времени.

Чтобы использовать дату и время в C#, создайте объект структуры DateTime с помощью ключевого слова new. Ниже создается объект DateTime с Значением по умолчанию.

DateTime dt = new DateTime(); // присваивается значение по умолчанию 01/01/0001 00:00:00

Значение по умолчанию и минимальное значение объекта DateTime составляет 01 января 0001 года 00:00:00 (полночь). Максимальное значение может быть 31 декабря 9999 года в 23:59:59

Используйте различные конструкторы структуры DateTime для присвоения начального значения объекту DateTime.

// присваивается значение по умолчанию 01/01/0001 00:00:00
DateTime dt1 = new DateTime(); 
// присваивается год, месяц, день
DateTime dt2 = new DateTime(2015, 12, 31); 
// присваивается год, месяц, день, час, минута, секунды
DateTime dt3 = new DateTime(2015, 12, 31, 5, 10, 20);
 
// присваивается год, месяц, день, час, минута, секунды, UTC часовой пояс
DateTime dt4 = new DateTime(2015, 12, 31, 5, 10, 20, DateTimeKind.Utc);

В предыдущем примере мы указали год, месяц и день в конструкторе. Год может быть от 0001 до 9999, месяц от 1 до 12, день от 1 до 31. Установка любого другого значения за пределами этого диапазона приведет к возникновению исключения в режиме выполнения.

DateTime dt = new DateTime(2015, 12, 32); // вызывается исключение: день выходит за пределы диапазона

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

Тайки

Тайки представляют собой дату и время, выраженные в количестве 100 наносекундных интервалов с 00:00:00.000 1 января по григорианскому календарю. Ниже с помощью числового значения инициализируется объект DateTime.

DateTime dt = new DateTime(636370000000000000); 
DateTime.MinValue.Ticks; // Минимальное значение ticks
DateTime.MaxValue.Ticks; // Максимальное значение ticks

Статические поля DateTime

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

DateTime currentDateTime = DateTime.Now; // Возвращает текущую дату и время
DateTime todaysDate = DateTime.Today; // Возвращает сегодняшнюю дату
DateTime currentDateTimeUTC = DateTime.UtcNow; // Возвращает текущую дату и время в UTC
DateTime maxDateTimeValue = DateTime.MaxValue; // Возвращает максимальное значение DateTime
DateTime minDateTimeValue = DateTime.MinValue; // Возвращает минимальное значение DateTime

Интервал времени (TimeSpan)

TimeSpan — это структура, которая используется для представления времени в единицах времени (дни, часы, минуты, секунды и миллисекунды).

DateTime dt = new DateTime(2015, 12, 31);
           
TimeSpan ts = new TimeSpan(25, 20, 55);
 
DateTime newDate = dt.Add(ts);
Console.WriteLine(newDate); // 1/1/2016 1:20:55 AM

Разность между двумя датами даёт TimeSpan.

DateTime dt1 = new DateTime(2015, 12, 31); 
DateTime dt2 = new DateTime(2016, 2, 2);
TimeSpan result = dt2.Subtract(dt1); // 33.00:00:00

Операторы

Структура DateTime перегружена операторами +, -, ==!, >, <, <=, >=, что упрощает сложение, вычитание и сравнение дат. Это делает обработку дат очень удобной.

DateTime dt1 = new DateTime(2015, 12, 20);
DateTime dt2 = new DateTime(2016, 12, 31, 5, 10, 20); 
TimeSpan time = new TimeSpan(10, 5, 25, 50);
Console.WriteLine(dt2 + time); // 1/10/2017 утро 10:36:10
Console.WriteLine(dt2 - dt1); //377.05:10:20
Console.WriteLine(dt1 == dt2); //False
Console.WriteLine(dt1 != dt2); //True
Console.WriteLine(dt1 > dt2); //False
Console.WriteLine(dt1 < dt2); //True
Console.WriteLine(dt1 >= dt2); //False
Console.WriteLine(dt1 <= dt2); //True

Преобразовать DateTime в строку

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

МетодОписание
ToString

Преобразовать значение DateTime в строку с указанным форматом в текущей области.

ToShortDateString

Преобразовать значение DateTime в строку короткой даты в текущей области (модель M/d/yyyy).

ToShortTimeString

Преобразовать значение DateTime в строку короткого времени в текущей области (модель h: mm: ss).

ToLongDateString

Преобразовать значение DateTime в строку долгой даты в текущей области (модель dddd, MMMM d, yyyy).

ToLongTimeString

Преобразовать значение DateTime в строку долгого времени в текущей области (модель h:mm:ss tt).

Ниже приведен пример того, как преобразовать DateTime в строку различного формата.

var dt = DateTime.Now;
Console.WriteLine("Текущая строка даты и времени: " + dt.ToString("d"));
Console.WriteLine("Формат MM/dd/yyyy: " + dt.ToString("MM/dd/yyyy"))
Console.WriteLine("Формат dddd, dd MMMM yyyy: " + dt.ToString("dddd, dd MMMM yyyy"));
Console.WriteLine("Формат MM/dd/yyyy h:mm tt: " + dt.ToString("MM/dd/yyyy h:mm tt"));
Console.WriteLine("Формат MMMM dd: " + dt.ToString("MMMM dd"));
Console.WriteLine("Формат HH:mm:ss: " + dt.ToString("HH:mm:ss"));
Console.WriteLine("Формат hh:mm tt: " + dt.ToString("hh:mm tt"));
Console.WriteLine("Короткая строка даты: " + dt.ToShortDateString());
Console.WriteLine("Длинная строка даты: " + dt.ToLongDateString());
Console.WriteLine("Короткая строка времени: " + dt.ToShortTimeString());
Console.WriteLine("Длинная строка времени: " + dt.ToLongTimeString());

Преобразование строки в DateTime

Методы Parse (), ParseExact (), TryParse () и TryParseExact () могут использоваться для преобразования действительных строк даты и времени в объект DateTime.

Если указанная строка не является действительным представлением даты и времени, методы Parse () и ParseExact () выбросят исключение. Поэтому рекомендуется использовать методы TryParse () или TryParseExact (), так как если строка недействительна, они вернут false.

var str = "5/12/2020";
DateTime dt;
            
var isValidDate = DateTime.TryParse(str, out dt);
if(isValidDate)
    Console.WriteLine(dt);
else
    Console.WriteLine($"{str} is not a valid date string");