Представление даты и времени

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

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

var ts1 = new TimeSpan(50); // количество отсчётов по 100 нс

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

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

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

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

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


6633160253627473.html
6633205097250728.html
    PR.RU™