Урок 23. Тип данных DateTime C#


На двадцать третьем уроке учебника по основам C# мы начнем изучение типа данных DateTime. Структура позволяет хранить и обрабатывать информацию о дате и времени в диапазоне тысяч лет, но с точностью в доли микросекунды.

Тип данных DateTime

До сих пор в нашем учебнике по C# мы рассматривали хранение и манипулирование числовыми и текстовыми данными. Если вы хотите обрабатывать информацию, содержащую дату и время, то использовать их (числа или текст) – не самое оптимальное решение. Гораздо лучшим вариантом является структура DateTime.

Структура DateTime описывает момент времени, содержит как дату, так и время. Часть date содержит дату, месяц и год, которые могут представлять даты между 1 января 0001 и 31 декабря 9999, период почти десять тысяч лет. Часть time хранит время с точностью миллисекунды.

Поскольку тип данных DateTime является структурой, а не объектом, переменные этого типа не могут содержать значения null. Однако при наличии такого широкого диапазона значений для указания неопределенной даты обычно используется такая конкретная дата, как 1/1/1 или 31/12/9999.

Всемирное координированное время

Всемирное координированное время (UTC) является всемирным стандартом для определения времени. В отличие от местного времени, которое варьируется между часовыми поясами и с переходом на летнее время, UTC время одинаково везде на Земле одновременно. Например, по местному времени это может быть 9: 00 утра в Великобритании и 10:00 утра во Франции. Выраженное в UTC - 9: 00 в обеих странах.

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

Структура DateTime позволяет создавать значения даты и времени, используя местное время или UTC. Оно позволяет преобразование между 2 временами так, что информацию можно хранить точно и показывать, используя предпочтение юзера.

Ticks

Наименьший определяемый интервал времени - десять миллионных долей секунды, или сто наносекунд. Этот период времени известен как тик (Ticks). Тики обеспечивают точный метод описания времени в DateTime путем подсчета количества тиков с 1 января 0001.

Назначение DateTime

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

Конструкторы DateTime

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

DateTime newDate;
newDate = new DateTime(2019, 12, 20);           // 20 декабря 2019 (полночь)
newDate = new DateTime(2006, 13, 20);           // ошибка
Чтобы включить время в значение DateTime, можно использовать дополнительные параметры. Для представления часов, минут и секунд можно добавить три дополнительных целочисленных параметра. Для большей точности можно указать седьмой целочисленный параметр, представляющий число миллисекунд.

DateTime newDate;
newDate = new DateTime(2019, 1, 2, 3, 4, 5);    // 2 января 2019 03:04:05
newDate = new DateTime(2019, 1, 2, 3, 4, 5, 6); // 2 января 2019 03:04:05.0006
Наиболее точное значение DateTime использует количество тиков в 64-разрядном целочисленном (или длинном) параметре. Параметр определяет количество тиков с полуночи 1 января 0001. Количество тиков для существующей даты также может быть извлечено из DateTime путем чтения свойства Ticks.

DateTime newDate;
newDate = new DateTime(0);                      // 1 января 0001 (полночь)
newDate = new DateTime(630823790450000000);     // 2 января 2000 03:04:05
long numTicks = newDate.Ticks;                  // Result = 630823790450000000
Синтаксический анализ строк

Принимая дату, введенную пользователем, может быть трудно гарантировать, что используется правильный формат, особенно для международных приложений, где пользователи в разных странах имеют различные форматы даты. Метод Parse преобразует строки в значения DateTime, используя локальные форматы дат. Примечание: существуют различные перегруженные варианты метода разбора, которые дают более точный контроль над преобразованием строк. Существует также другой метод с именем ParseExact. Это выходит за рамки нашего учебника по основам C#.

Назначение текущей даты и времени

Структура DateTime предоставляет три статических свойства, возвращающих текущую дату или время. Свойство Now возвращает текущую локальную дату и время. Если вам нужна только дата, вы можете использовать свойство Today, которое по умолчанию время до полуночи. Наконец, при хранении времени с использованием скоординированного универсального времени свойство UtcNow предоставляет правильную дату и время в формате UTC.

DateTime newDate;
newDate = DateTime.Now;                         // текущее время
newDate = DateTime.Today;                       // текущая дата (полночь)
newDate = DateTime.UtcNow;                      // текущее UTC время
MinValue и MaxValue

Последний способ создания DateTime - использовать одно из двух предопределенных значений. Они извлекаются из статических свойств MinValue или MaxValue . Эти свойства возвращают минимальные или максимально возможные значения DateTime и обычно используются, чтобы указать, что дата не определена, если использование null не разрешено.

DateTime newDate;
newDate = DateTime.MinValue;                    // 01/01/0001 00:00:00
newDate = DateTime.MaxValue;                    // 31/12/9999 23:59:59
.NET 2.0 DateTime и null

Ранее в учебнике мы рассмотрели числовые типы данных nullable, которые были представлены как часть Framework 2.0. Тип данных DateTime имеет nullable эквивалент с подобной функциональностью.

DateTime? nullableDate;
nullableDate = DateTime.MinValue;          
nullableDate = null;                            // присваиваем  неопределенное значение
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, Уроки по си шарп, DateTime, си шарп, работа с датой




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.



Юмореска "Дневник кота Стейка": глава №1
Бездонная мгла и любовь на её фоне
Создание модульных тестов и концепция AAA