Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базовые технологии платформы .NET.docx
Скачиваний:
13
Добавлен:
03.11.2018
Размер:
614.46 Кб
Скачать

2. Дата и время

В пространстве имён System определены три неизменяемые структуры для работы с датой и временем: TimeSpan, DateTime и DateTimeOffset.

Структура TimeSpan представляет интервал времени с точностью 100 нс. Для создания экземпляра структуры можно использовать один из её конструкторов, статические методы вида TimeSpan.FromЕдиницыВремени() или разность двух переменных типа DateTime.

var ts1 = new TimeSpan(20); // "тики", каждый = 100 нс

var ts2 = new TimeSpan(1, 20, 500); // часы, минуты, секунды

var ts3 = TimeSpan.FromHours(3.5);

Структура TimeSpan перегружает операции сравнения и аддитивные операции. Свойства TimeSpan позволяют обратиться либо к отдельному временному компоненту интервала (свойства Days, Hours, Minutes, Seconds, Milliseconds), либо выразить весь интервал через указанную единицу времени (TotalDays, TotalHours и т.п.)

TimeSpan ts = TimeSpan.FromDays(10) - TimeSpan.FromSeconds(1);

Console.WriteLine(ts.Days); // 9

Console.WriteLine(ts.Seconds); // 59

Console.WriteLine(ts.TotalDays); // 9.99998842592593

Console.WriteLine(ts.TotalSeconds); // 863999

Структуры DateTime и DateTimeOffset предназначены для хранения даты и времени. Интервал дат ‑ от 1 января 1 года нашей эры до 31 декабря 9999 года, точность времени – 100 нс. DateTimeOffset дополнительно позволяет сохранить смещение всемирного координированного времени (UTC offset), что даёт возможность правильно сравнивать даты разных часовых поясов.

Структура DateTime имеет конструкторы, позволяющие указать для создаваемого экземпляра год, месяц, день, часы, минуты, секунды, миллисекунды. Дополнительно можно задать параметр из перечисления DateTimeKind, который показывает, какое именно время содержит экземпляр (Unspecified, Local, Utc). Также можно задать используемый датой календарь – это влияет на алгоритм вычисления некоторых свойств даты. Конструкторы структуры DateTimeOffset дополнительно позволяют указать смещение UTC как значение TimeSpan1:

var dt1 = new DateTime(2012, 12, 21);

var dt2 = new DateTime(2012, 12, 21, 12, 0, 0, DateTimeKind.Local);

var dt3 = new DateTime(2012, 12, 21, new PersianCalendar());

var dto = new DateTimeOffset(dt1, TimeSpan.FromHours(-6));

Определено неявное преобразование DateTime к DateTimeOffset. Такие свойства структуры DateTimeOffset как UtcDateTime, LocalDateTime, DateTime дают возможность получить значение времени UTC в виде DateTime.

Используя DateTime и DateTimeOffset, текущее время и дату можно узнать при помощи свойств Now, Today, UtcNow. Обе структуры содержат свойства для чтения отдельных временных компонентов, а также методы для увеличения временных компонент на указанную (возможно, отрицательную) величину. Структуры DateTime и DateTimeOffset также перегружают операции сравнения и аддитивные операции.

var dt = DateTime.Today; // текущая дата (без времени)

Console.WriteLine(dt.Month); // узнаем текущий месяц

Console.WriteLine(dt.DayOfWeek); // и день недели

var changed_dt = dt.AddDays(-3.5);

DateTimeOffset dto = DateTime.Now; // неявное преобразование

Console.WriteLine(dto.Offset); // узнаем UTC offset