Содержание
Для работы с датой и временем в пространстве имен System предусмотрено три неизменяемых структуры: DateTime, DateTimeOffset и TimeSpan.
TimeSpan
Структура TimeSpan
представляет временной интервал или время суток. В последнем случае это время (без даты) прошедшее с полуночи (без учет переходов на летнее время). Минимально значение для TimeSpan
— 100 наносекунд, максимальное — примерно 10 миллионов дней (значение может быть и положительным, и отрицательным).
Создать экземпляр TimeSpan
можно с помощью конструктора, вызвав один из статических методов From...
, либо путем вычитания одного экземпляра DateTime
из другого.
Предусмотрено 4 перегруженных конструктора:
1 2 3 4 | public TimeSpan (int hours, int minutes, int seconds); public TimeSpan (int days, int hours, int minutes, int seconds); public TimeSpan (int days, int hours, int minutes, int seconds, int milliseconds); public TimeSpan (long ticks); // Каждый tick = 100ns |
Статические методы From...
более удобны когда нужно указать интервал в каких-то одних единицах (минутах, секундах):
1 2 3 4 5 | public static TimeSpan FromDays (double value); public static TimeSpan FromHours (double value); public static TimeSpan FromMinutes (double value); public static TimeSpan FromSeconds (double value); public static TimeSpan FromMilliseconds (double value); |
Пример:
1 2 3 | Console.WriteLine (new TimeSpan (2, 30, 0)); // 02:30:00 Console.WriteLine (TimeSpan.FromHours (2.5)); // 02:30:00 Console.WriteLine (TimeSpan.FromHours (−2.5)); // −02:30:00 |
TimeSpan
перегружает операторы <
, >
, +
и -
:
1 2 | TimeSpan.FromHours(2) + TimeSpan.FromMinutes(30); // 2,5 часа TimeSpan.FromDays(10) - TimeSpan.FromSeconds(1); // 9.23:59:59 |
TimeSpan
содержит свойства Days
, Hours
, Minutes
, Seconds
и Milliseconds
, возвращающие соответствующие целочисленные значения, а также аналогичные свойства Total...
, возвращающие значения типа double
:
1 2 3 4 5 6 7 8 9 10 11 | TimeSpan nearlyTenDays = TimeSpan.FromDays(10) - TimeSpan.FromSeconds(1); Console.WriteLine (nearlyTenDays.Days); // 9 Console.WriteLine (nearlyTenDays.Hours); // 23 Console.WriteLine (nearlyTenDays.Minutes); // 59 Console.WriteLine (nearlyTenDays.Seconds); // 59 Console.WriteLine (nearlyTenDays.Milliseconds); // 0 Console.WriteLine (nearlyTenDays.TotalDays); // 9.99998842592593 Console.WriteLine (nearlyTenDays.TotalHours); // 239.999722222222 Console.WriteLine (nearlyTenDays.TotalMinutes); // 14399.9833333333 Console.WriteLine (nearlyTenDays.TotalSeconds); // 863999 Console.WriteLine (nearlyTenDays.TotalMilliseconds); // 863999000 |
Статический метод Parse
является противоположностью ToString
, преобразуя строку в TimeSpan
. Метод TryParse
делает тоже самое, но в случае неудачи возвращает false
вместо генерации исключения.
Значением по умолчанию для TimeSpan
является TimeSpan.Zero
.
DateTime и DateTimeOffset
DateTime
и DateTimeOffset
— это неизменяемые структуры для представления даты и времени. Поддерживаемый диапазон лет — от 0001 до 9999, а минимальный шаг (tick
) — 100 наносекунд.
Структуры отличаются по своему внутреннему строению и тем, как они обрабатывают часовые пояса. DateTime
состоит из двух порций информации:
- 62-битное число, указывающее количество
tick
, прошедшее с 1/1/001 - 2-битное значение
enum
— флагDateTimeKind
с тремя состояниями, который указывает, относительно чего беретсяDateTime
:Local
— местное время на текущем компьютереUtc
— UTC (современный эквивалент Гринвича)Unspecified
— не определено — принимается по умолчанию и означает, чтоDateTime
не зависит от часового пояса
Таким образом экземпляр DateTime
не содержит информации о конкретном часовом поясе и не хранит числовое смещение UTC. Во время сравнения DateTime
сравнивает только значения ticks, игнорируя флаг с тремя состояниями и считает, что два значения равны, если они имеют одинаковый год, месяц, день, часы, минуты и т.д.
Структура DateTimeOffset
внутри содержит:
- поле
DateTime
, значение которого всегда представлено относительно UTC - 16-битное целочисленное поле
Offset
(типTimeSpan
), выражающее смещение относительно UTC в минутах
Во время сравнения DateTimeOffset
сравнивает только поле DateTime
(которое в UTC), Offset
игнорируется. Таким образом DateTimeOffset
считает два значения равными, если они ссылаются на одну и туже точку во времени.
Исходя из этого, DateTime
считает следующие два значения различными, а DateTimeOffset
— равными:
1 2 | July 01 2007 09:00:00 +00:00 July 01 2007 03:00:00 −06:00 |
Создание экземпляра DateTime
DateTime
определяет два конструктора, которые принимают целочисленные значения для года, месяца и дня, а также дополнительно — для часов, минут, секунд и миллисекунд:
1 2 3 | public DateTime (int year, int month, int day); public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond); |
Если указывается только дата, время неявно устанавливается в полночь (0:00). Также конструктор DateTime
позволяет задать указанный выше флаг DateTimeKind
:
1 2 | DateTime dt1 = new DateTime (2000, 1, 1, 10, 20, 30, DateTimeKind.Local); DateTime dt2 = new DateTime (2000, 1, 1, 10, 20, 30, DateTimeKind.Utc); |
Перегруженный конструктор DateTime
может принимать объект Calendar
(System.Globalization
), позволяя задать используемый календарь:
1 2 3 | DateTime d = new DateTime (5767, 1, 1, new System.Globalization.HebrewCalendar()); Console.WriteLine (d); // 12/12/2006 12:00:00 AM |
По умолчанию используется григорианский календарь. Для выполнения вычислений с использованием другого календаря необходимо использовать соответствующие методы подкласс Calendar
.
Создать экземпляр DateTime
можно также передав конструктору единственный параметр ticks
типа long
, соответствующий количеству 100-наносекундных интервалов, прошедших от полуночи 01/01/0001.
Экземпляр DateTime
можно создать с помощью статических методов FromFileTime
и FromFileTimeUtc
, преобразующих время файлов Windows (тип long
), а также с помощью статического метода FromOADate
, преобразующего даты и время автоматизации OLE (тип double
).
С помощью статического метода SpecifyKind
можно создать экземпляр DateTime
, который будет отличаться от другого только значением DateTimeKind
:
1 2 3 | DateTime d = new DateTime (2000, 12, 12); // Unspecified DateTime utc = DateTime.SpecifyKind (d, DateTimeKind.Utc); Console.WriteLine (utc); // 12/12/2000 12:00:00 AM |
Для создания объекта DateTime
из строки нужно воспользоваться статическим методом Parse
или ParseExact
. Оба метода могут дополнительно принимать флаги и поставщики форматов, а ParseExact
также может принимать форматную строку.
Создание экземпляра DateTimeOffset
DateTimeOffset
имеет похожий набор конструкторов, но им обязательно также нужно передавать смещение UTC в виде TimeSpan
:
1 2 3 4 5 6 | public DateTimeOffset (int year, int month, int day, int hour, int minute, int second, TimeSpan offset); public DateTimeOffset (int year, int month, int day, int hour, int minute, int second, int millisecond, TimeSpan offset); |
Значение TimeSpan
должно составлять целое количество минут, иначе будет выброшено исключение.
DateTimeOffset
также имеет конструкторы, которые принимают объект Calendar
, значение ticks
типа long
, а также статические методы Parse
и ParseExact
, принимающие строку.
Экземпляр DateTimeOffset
можно также создать из существующего экземпляра DateTime
либо с помощью конструктора, либо с помощью неявного приведения:
1 2 3 | public DateTimeOffset (DateTime dateTime); public DateTimeOffset (DateTime dateTime, TimeSpan offset); DateTimeOffset dt = new DateTime (2000, 2, 3); |
Если смещение не указано, он выводится автоматически по следующим правилам:
- если свойство
DateTimeKind
объектаDateTime
равноUtc
, смещение принимается равным нулю - если свойство
DateTimeKind
объектаDateTime
равноLocal
илиUnspecified
(по умолчанию), смещение берется из текущего часового пояса
DateTimeOffset
также может быть преобразован в DateTime
с помощью одного из трех свойств:
UtcDateTime
возвращает экземплярDateTime
как время UTC (без смещения)LocalDateTime
возвращает экземплярDateTime
в текущем часовом поясеDateTime
возвращает экземплярDateTime
в часовом поясе, переданном в качестве аргумента (свойствоKind
устанавливается равнымUnspecified
)
Текущая дата и время
Обе структуры имеют статические свойство Now
, которое возвращает текущую дату и время:
1 2 | Console.WriteLine (DateTime.Now); // 11/11/2014 1:23:45 PM Console.WriteLine (DateTimeOffset.Now); // 11/11/2014 1:23:45 PM +03:00 |
Статическое свойство UtcNow
возвращает текущую дату и время в UTC:
1 2 | Console.WriteLine (DateTime.UtcNow); // 11/11/2007 7:23:45 AM Console.WriteLine (DateTimeOffset.UtcNow); // 11/11/2007 7:23:45 AM +00:00 |
DateTime
содержит также статическое свойство Today
, возвращающее текущую дату (без времени):
1 | Console.WriteLine (DateTime.Today); // 11/11/2014 12:00:00 AM |
Манипулирование датой и временем
Обе структуры имеют схожий набор свойств, возвращающих элементы даты и времени:
1 2 3 4 5 6 7 8 9 10 11 12 | DateTime dt = new DateTime (2000, 2, 3, 10, 20, 30); Console.WriteLine (dt.Year); // 2000 Console.WriteLine (dt.Month); // 2 Console.WriteLine (dt.Day); // 3 Console.WriteLine (dt.DayOfWeek); // Thursday Console.WriteLine (dt.DayOfYear); // 34 Console.WriteLine (dt.Hour); // 10 Console.WriteLine (dt.Minute); // 20 Console.WriteLine (dt.Second); // 30 Console.WriteLine (dt.Millisecond); // 0 Console.WriteLine (dt.Ticks); // 630851700300000000 Console.WriteLine (dt.TimeOfDay); // 10:20:30 (TimeSpan) |
DateTimeOffset
также содержит свойство Offset
, возвращающее TimeSpan
, а DateTime
— свойство Kind
, возвращающее значение DateTimeKind
.
Обе структуры содержат ряд методов для выполнения вычислений (большинство принимают аргументы типа double
или int
):
AddYears
AddMonths
AddDays
AddHours
AddMinutes
AddSeconds
AddMilliseconds
AddTicks
Эти методы возвращают новый экземпляр DateTime
или DateTimeOffset
и учитывают високосный год. Для вычитания можно передавать отрицательное значение.
Метод Add
добавляет TimeSpan
к DateTime
или DateTimeOffset
. Оператор +
выполняет тоже самое:
1 2 3 | TimeSpan ts = TimeSpan.FromMinutes (90); Console.WriteLine (dt.Add (ts)); Console.WriteLine (dt + ts); |
Можно также вычитать TimeSpan
из DateTime
/DateTimeOffset
и вычитать один экземпляр
DateTime
/DateTimeOffset
из другого, в последнем случае будет возвращен TimeSpan
:
1 2 3 | DateTime thisYear = new DateTime (2007, 1, 1); DateTime nextYear = thisYear.AddYears (1); TimeSpan oneYear = nextYear - thisYear; |
Форматирование даты и времени
Вызов ToString
на объекте DateTime
форматирует результат в виде краткой даты (только числа), за которой следует полное время (включая секунды):
1 | 13/02/2000 11:50:30 AM |
По умолчанию панель управления ОС определяет такие вещи, как порядок следования даты, месяца и года, должны ли использоваться ведущие нули, формат времени (12 или 24 часа) и др.
Вызов ToString
на объекте DateTimeOffset
делает тоже самое, но добавляет еще и смещение:
1 | 3/02/2000 11:50:30 AM −06:00 |
Методы ToShortDateString
и ToLongDateString
возвращают только дату в коротком или длинном формате. Формат длинной даты также определяется в панели управления. Методы ToShortTimeString
и ToLongTimeString
возвращают только время (ToShortTimeString
без секунд).
Метод ToString
перегружен для приема форматной строки и поставщиков, позволяя указывать широкий диапазон опций и управлять применением региональных настроек.
ToUniversalTime и ToLocalTime
Экземплярные методы ToUniversalTime
и ToLocalTime
структуры DateTime
выполняют преобразование в универсальное (UTC) или местное время. Они применяют текущие настройки часового пояса компьютера и возвращают новый экземпляр DateTime
со значением DateTimeKind
, равным Utc
или Local
:
1 2 3 4 5 6 | DateTime dt1 = new DateTime (2000, 1, 1, 10, 20, 30, DateTimeKind.Local); DateTime dt2 = new DateTime (2000, 1, 1, 10, 20, 30, DateTimeKind.Utc); Console.WriteLine (dt1 == dt2); // True DateTime local = DateTime.Now; DateTime utc = local.ToUniversalTime(); Console.WriteLine (local == utc); // False |
Экземплярные методы ToUniversalTime
и ToLocalTime
структуры DateTimeOffset
возвращают новый экземпляр, представляющий тот же самый момент времени, но в UTC или местном времени. В отличие от аналогичных методов DateTime
, эти методы не оказывают влияния на лежащее в основе значение даты и времени, а изменяют только смещение:
1 2 3 4 5 | DateTimeOffset local = DateTimeOffset.Now; DateTimeOffset utc = local.ToUniversalTime(); Console.WriteLine (local.Offset); // +03:00:00 Console.WriteLine (utc.Offset); // 00:00:00 Console.WriteLine (local == utc); // True |
С помощью метода EqualsExact
можно включить в сравнение поле Offset
:
1 | Console.WriteLine (local.EqualsExact (utc)); // False |
TimeZone и TimeZoneInfo
Классы TimeZone
и TimeZoneInfo
предоставляют информацию, касающуюся названий часовых поясов, смещений UTC и правил перехода на зимнее время. TimeZone
позволяет обратиться только к текущему местному часовому поясу, а TimeZoneInfo
обеспечивает доступ к часовым поясам во всем мире.
TimeZone
Статический метод TimeZone.CurrentTimeZone
возвращает экземпляр TimeZone
на основе текущих местных настроек:
1 2 3 | TimeZone zone = TimeZone.CurrentTimeZone; Console.WriteLine (zone.StandardName); // W. Australia Standard Time Console.WriteLine (zone.DaylightName); // W. Australia Daylight Time |
Метод IsDaylightSavingTime
возвращает true
, если переданный ему объект DateTime
относится к зимнему времени, и false
— если к летнему:
1 2 3 4 | DateTime dt1 = new DateTime (2008, 1, 1); DateTime dt2 = new DateTime (2008, 6, 1); Console.WriteLine (zone.IsDaylightSavingTime (dt1)); // True Console.WriteLine (zone.IsDaylightSavingTime (dt2)); // False |
Метод GetUtcOffset
возвращает смещение относительно UTC для переданного ему объекта DateTime
:
1 2 | Console.WriteLine (zone.GetUtcOffset (dt1)); // 09:00:00 Console.WriteLine (zone.GetUtcOffset (dt2)); // 08:00:00 |
Метод GetDaylightChanges
возвращает специфическую информацию о зимнем времени для заданного года:
1 2 3 4 | DaylightTime day = zone.GetDaylightChanges (2008); Console.WriteLine (day.Start); // 26/10/2008 2:00:00 AM (Note D/M/Y) Console.WriteLine (day.End); // 30/03/2008 3:00:00 AM Console.WriteLine (day.Delta); // 01:00:00 |
TimeZoneInfo
Класс TimeZoneInfo
работает аналогичным образом. Статический класс TimeZoneInfo.Local
возвращает экземпляр TimeZoneInfo
для текущего местного часового пояса:
1 2 3 | TimeZoneInfo zone = TimeZoneInfo.Local; Console.WriteLine (zone.StandardName); // W. Australia Standard Time Console.WriteLine (zone.DaylightName); // W. Australia Daylight Time |
Класс TimeZoneInfo
также содержит методы IsDaylightSavingTime
и GetUtcOffset
, но в отличие от одноименных методов класс TimeZone
они могут принимать как объекты типа DateTime
так и объекты DateTimeOffset
.
Вызвав метод FindSystemTimeZoneById
с идентификатором часового пояса (Id
), можно получить объект TimeZoneInfo
для любого часового пояса в мире.
1 2 3 4 5 | TimeZoneInfo wa = TimeZoneInfo.FindSystemTimeZoneById ("W. Australia Standard Time"); Console.WriteLine (wa.Id); // W. Australia Standard Time Console.WriteLine (wa.DisplayName); // (GMT+08:00) Perth Console.WriteLine (wa.BaseUtcOffset); // 08:00:00 Console.WriteLine (wa.SupportsDaylightSavingTime); // True |
Свойство Id
соответствует значению передаваемому методу FindSystemTimeZoneById
. Статический метод GetSystemTimeZones
возвращает все часовые пояса мира, соответственно можно вывести список всех доступных Id
часовых поясов:
1 2 | foreach (TimeZoneInfo z in TimeZoneInfo.GetSystemTimeZones()) Console.WriteLine (z.Id); |
С помощью статического метода TimeZoneInfo.CreateCustomTimeZone
можно создать свой специфический часовой пояс, передав методу все данные о часовом поясе. После создания экземпляра изменить его свойства уже нельзя, т.к. TimeZoneInfo
является неизменяемым.
С помощью экземплярного метода ToSerializedString
можно сериализовать часовой пояс в читабельную строку, а с помощью статического метода TimeZoneInfo.FromSerializedString
— десериализовать ее.
Статический метод ConvertTime
преобразует DateTime
или DateTimeOffset
из одного часового пояса в другой, а методы ConvertTimeFromUtc
и ConvertTimeToUtc
преобразуют непосредственно в или из UTC.
Для работы с зимнем временем класс TimeZoneInfo
предлагает следующие методы:
IsInvalidTime
— возвращаетtrue
, еслиDateTime
находится в пределах часа, который будет пропущен, когда часы переводятся впередIsAmbiguousTime
— возвращаетtrue
, еслиDateTime
илиDateTimeOffset
находится в пределах часа, который будет повторен, когда часы переводятся назадGetAmbiguousTimeOffsets
— возвращает массив изTimeSpan
, представляющий допустимые варианты смещения дляDateTime
илиDateTimeOffset
, находящихся в пределах часа, повторяющегося при переводе часов назад.
В отличие от TimeZone
, из TimeZoneInfo
нельзя получить напрямую даты, указывающие начало и конец зимнего времени. Вместо этого нужно вызывать метод GetAdjustmentRules
, который возвращает список правил перехода на зимнее время, применяемых ко всем годам. Каждое правило — объект типа TimeZoneInfo.AdjustmentRule
— имеет свойства DateStart
и DateEnd
, указывающие диапазон дат, в пределах которого это правило допустимо:
1 2 | foreach (TimeZoneInfo.AdjustmentRule rule in wa.GetAdjustmentRules()) Console.WriteLine ("Rule: applies from " + rule.DateStart + " to " + rule.DateEnd); |
Например в западной Австралии переход на зимнее время впервые был введен в 2006 г. в межсезонье, поэтому для первого года будет отдельное правило, а всего их будет два:
1 2 | Rule: applies from 1/01/2006 12:00:00 AM to 31/12/2006 12:00:00 AM Rule: applies from 1/01/2007 12:00:00 AM to 31/12/2009 12:00:00 AM |
Каждый экземпляр TimeZoneInfo.AdjustmentRule
имеет свойство DaylightDelta
типа TimeSpan
— время, необходимое для перехода на зимнее время в данном часовом поясе (смещение для зимнего времени), как правило это один час.
Также AdjustmentRule
содержит свойства DaylightTransitionStart
и DaylightTransitionEnd
, возвращающие тип TimeZoneInfo.TransitionTime
, включающий следующие свойства:
1 2 3 4 5 6 | public bool IsFixedDateRule { get; } // true если дата фиксированная, false - плавающая public DayOfWeek DayOfWeek { get; } // только для плавающей даты public int Week { get; } // только для плавающей даты public int Day { get; } // только для фиксированной даты public int Month { get; } public DateTime TimeOfDay { get; } |
Правило может выражать как фиксированную дату (например, 5 марта 2:00), так и плавающую (например, последнее воскресенье марта). Свойство IsFixedDateRule
возвращает true
если дата фиксированная, и fasle
если дата плавающая. Фиксированная дата задается свойствами Day
, Month
и TimeOfDay
, а плавающая — DayOfWeek
, Week
, Month
и TimeOfDay
.
Преобразование даты в строку
Объекты DateTime
и DateTimeOffset
могут быть преобразованы в строку с помощью экземплярного метода ToString
. В качестве дополнительного параметра метод может принимать форматные строки. Подробно этот метод и форматные строки рассмотрены в разделе, посвященном форматированию и преобразованию строк. Ниже будут перечислены стандартные и специальные форматные строки для типов DateTime
и DateTimeOffset
.
Стандартные форматные строки для даты, чувствительные к культуре
Форматная строка | Значение | Пример |
---|---|---|
d | Краткая дата | 01/02/2000 |
D | Полная дата | Sunday, 02 January 2000 |
t | Краткое время | 17:18 |
T | Полное время | 17:18:19 |
f | Полная дата+краткое время | Sunday, 02 January 2000 17:18 |
F | Полная дата+полное время | Sunday, 02 January 2000 17:18:19 |
g | Краткая дата+краткое время | 01/02/2000 17:18 |
G (по умолчанию) | Краткая дата+полное время | 01/02/2000 17:18:19 |
m, M | Месяц и день | January 02 |
y, Y | Год и месяц | 2000 January |
Стандартные форматные строки для даты, не чувствительные к культуре
Форматная строка | Значение | Пример | Примечание |
---|---|---|---|
o | Возможность кругового преобразования | 2000-01-02T17:18:19.0000000 | Если DateTimeKind не является Unspecified, будет присоединяться информация о часовом поясе |
r, R | Стандарт RFC 1123 | Sun, 02 Jan 2000 17:18:19 GMT | Не преобразованное в UTC |
s | Сортируемое, ISO 8601 | 2000-01-02T17:18:19 | Совместимо с текстовой сортировкой |
u | Универсально сортируемое | 2000-01-02 17:18:19Z | Совместимо с текстовой сортировкой, не преобразованное в UTC |
U | UTC | Sunday, 02 January 2000 17:18:19 | Преобразованная в UTC |
Специальные форматные строки для даты и времени
Символ | Описание | Пример |
---|---|---|
d | День месяца в виде числа (1-31), одна цифра не дополняется нулем | 6/1/2009 1:45:30 PM -> 1 6/15/2009 1:45:30 PM -> 15 |
dd | День месяца в виде числа (01-31), одна цифра дополняется нулем | 6/1/2009 1:45:30 PM -> 01 6/15/2009 1:45:30 PM -> 15 |
ddd | Сокращенное название дня недели | 6/15/2009 1:45:30 PM -> Mon (en-US) 6/15/2009 1:45:30 PM -> Пн (ru-RU) 6/15/2009 1:45:30 PM -> lun. (fr-FR) |
dddd | Полное название дня недели | 6/15/2009 1:45:30 PM -> Monday (en-US) 6/15/2009 1:45:30 PM -> понедельник (ru-RU) 6/15/2009 1:45:30 PM -> lundi (fr-FR) |
f — fffffff | Десятые — десятимиллионные доли секунды | 6/15/2009 13:45:30.617 -> 6 (f) 6/15/2009 13:45:30.0001150 -> 0001150 (fffffff) |
F — FFFFFFF | Тоже самое, что и предыдущее, но если соотвествующее значение равно 0, то не выводится ничего | 6/15/2009 13:45:30.617 -> 6 6/15/2009 13:45:30.050 -> (нет вывода) |
g, gg | Период или эра | 6/15/2009 1:45:30 PM -> A.D. |
h | Час в 12-часовом формате от 1 до 12 | 6/15/2009 1:45:30 AM -> 1 6/15/2009 1:45:30 PM -> 1 |
hh | Час в 12-часовом формате от 01 до 12 | 6/15/2009 1:45:30 AM -> 01 6/15/2009 1:45:30 PM -> 01 |
H | Час в 24-часовом формате от 0 до 23 | 6/15/2009 1:45:30 AM -> 1 6/15/2009 1:45:30 PM -> 13 |
HH | Час в 24-часовом формате от 00 до 23 | 6/15/2009 1:45:30 AM -> 01 6/15/2009 1:45:30 PM -> 13 |
K | Данные о часовом поясе | Со значениями DateTime: 6/15/2009 1:45:30 PM, Kind Unspecified -> 6/15/2009 1:45:30 PM, Kind Utc -> Z 6/15/2009 1:45:30 PM, Kind Local -> -07:00 (зависит от настроек локального компьютера) Со значениями DateTimeOffset: 6/15/2009 1:45:30 AM -07:00 —> -07:00 6/15/2009 8:45:30 AM +00:00 —> +00:00 |
m | Минуты, в диапазоне от 0 до 59 | 6/15/2009 1:09:30 AM -> 9 |
mm | Минуты, в диапазоне от 00 до 59 | 6/15/2009 1:09:30 AM -> 09 |
M | Месяц, в диапазоне от 1 до 12 | 6/15/2009 1:45:30 PM -> 6 |
MM | Месяц, в диапазоне от 01 до 12 | 6/15/2009 1:45:30 PM -> 06 |
MMM | Сокращенное название месяца | 6/15/2009 1:45:30 PM -> Jun (en-US) |
MMMM | Полное название месяца | 6/15/2009 1:45:30 PM -> June (en-US) |
s | Секунды, в диапазоне от 0 до 59 | 6/15/2009 1:45:09 PM -> 9 |
ss | Секунды, в диапазоне от 00 до 59 | 6/15/2009 1:45:09 PM -> 09 |
t | Первый символ указателя AM/PM | 6/15/2009 1:45:30 PM -> P (en-US) 6/15/2009 1:45:30 PM -> (fr-FR) |
tt | Указатель AM/PM | 6/15/2009 1:45:30 PM -> PM (en-US) 6/15/2009 1:45:30 PM -> (fr-FR) |
y | Год, в диапазоне от 0 до 99 | 1/1/1900 12:00:00 AM -> 0 6/15/2009 1:45:30 PM -> 9 |
yy | Год, в диапазоне от 00 до 99 | 1/1/1900 12:00:00 AM -> 00 6/15/2009 1:45:30 PM -> 09 |
yyy | Год в виде как минимум трех цифр | 1/1/0001 12:00:00 AM -> 001 6/15/2009 1:45:30 PM -> 2009 |
yyyy | Год в виде четырехзначного числа | 1/1/0001 12:00:00 AM -> 0001 6/15/2009 1:45:30 PM -> 2009 |
yyyyy | Год в виде пятизначного числа | 1/1/0001 12:00:00 AM -> 00001 6/15/2009 1:45:30 PM -> 02009 |
z | Часовой сдвиг от времени в формате UTC, без нулей в начале | 6/15/2009 1:45:30 PM -07:00 -> -7 |
zz | Часовой сдвиг от времени в формате UTC с нулями в начале для значений из одной цифры | 6/15/2009 1:45:30 PM -07:00 -> -07 |
zzz | Сдвиг в часах и минутах от времени в формате UTC | 6/15/2009 1:45:30 PM -07:00 -> -07:00 |
: | Разделитель компонентов времени | 6/15/2009 1:45:30 PM -> : (en-US) 6/15/2009 1:45:30 PM -> . (it-IT) |
/ | Разделитель компонентов даты | 6/15/2009 1:45:30 PM -> / (en-US) 6/15/2009 1:45:30 PM -> — (ar-DZ) 6/15/2009 1:45:30 PM -> . (tr-TR) |
% | Задает следующий символ в качестве настраиваемого описателя формата | 6/15/2009 1:45:30 PM (%h) -> 1 |
\ | Экранирующий символ | 6/15/2009 1:45:30 PM (h \h) -> 1 h |
любой другой символ | Символ копируется в результирующую строку без изменений | 6/15/2009 1:45:30 AM (arr hh:mm t) -> arr 01:45 A |
строка с любыми символами в (двойных/одинарных) кавычках | Буквенный разделитель строк | 6/15/2009 1:45:30 PM («arr:» h:m t) -> arr: 1:45 P 6/15/2009 1:45:30 PM (‘arr:’ h:m t) -> arr: 1:45 P |
Преобразование строки в дату/время, DateTimeStyles
Преобразование строки в объекты DateTime
или DateTimeOffset
можно осуществить с помощью статических методов Parse
и TryParse
. Подробно эти методы рассмотрены в разделе, посвященном форматированию и преобразованию строк.
Оба метода могут принимать enum DateTimeStyles
, определяющий как строка читается при преобразовании в тип даты и времени. Его членами являются:
None
— стандартное значение, запрещает наличие во входной строке дополнительных пробельных символовAllowLeadingWhite
— допускает в начале входной строки дополнительные пробелыAllowTrailingWhite
— допускает в конце входной строки дополнительные пробелыAllowInnerWhite
— допускает внутри входной строки дополнительные пробелыAssumeLocal
— если входная строка не имеет суффикса часового пояса, дает указание использовать локальное значениеAssumeUniversal
если входная строка не имеет суффикса часового пояса, дает указание использовать UTCAdjustToUniversal
— учитывает суффиксы часовых поясов во входной строке, но затем выполняет преобразование в UTC с использованием текущих региональных настроекNoCurrentDateDefault
— при разборе строки, содержащей время без даты, по умолчанию принимается сегодняшняя дата, но данный флаг дает указание в качестве даты использовать 01/01/0001RoundTripKind
AllowWhiteSpaces
— составной член, равенAllowLeadingWhite | AllowTrailingWhite | AllowInnerWhite