Урок 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.