Поделиться через


Метод System.DateTime.TryParse

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

Метод DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) анализирует строку, которая может содержать сведения о дате, времени и часовом поясе. Он аналогичен методу DateTime.Parse(String, IFormatProvider, DateTimeStyles) , за исключением того, что DateTime.TryParse(String, DateTime) метод не создает исключение, если преобразование завершается ошибкой.

Этот метод пытается игнорировать нераспознанные данные и полностью анализировать входную строку (s). Если s содержит время, но нет даты, метод по умолчанию заменяет текущую дату или, если styles он включает NoCurrentDateDefault флаг, он заменяет DateTime.Date.MinValue. Если s содержит дату, но не время, 12:00 полуночи используется в качестве времени по умолчанию. Если дата присутствует, но её компонент года состоит только из двух цифр, она преобразуется в год в provider текущем календаре параметра на основе значения свойства Calendar.TwoDigitYearMax. Любые начальные, внутренние или конечные пробелы в s игнорируются. Дата и время можно заключить в скобки с парой символов с начальным и конечным номером ('#', U+00023), а также с одним или несколькими символами NULL (U+0000).

Определенные допустимые форматы элементов даты и времени, а также имена и символы, используемые в датах и времени, определяются provider параметром, который может быть любым из следующих:

  • Объект CultureInfo, представляющий культуру, форматирование которой используется в параметре s. Объект, DateTimeFormatInfo возвращаемый свойством CultureInfo.DateTimeFormat , определяет форматирование, используемое в s.
  • DateTimeFormatInfo Объект, определяющий форматирование, используемое в s.
  • Настраиваемая IFormatProvider реализация. Его IFormatProvider.GetFormat метод возвращает объект DateTimeFormatInfo, задающий форматирование, используемое в s.

Если provider является null, используется текущая культура.

Если s строковое представление високосного дня в високосном году в текущем календаре, метод успешно анализирует s . Если s — строковое представление високосного дня в невисокосный год в календаре provider, операция синтаксического анализа завершается ошибкой, и метод возвращает false.

Параметр styles определяет точную интерпретацию синтаксического анализа строки и способ обработки операции синтаксического анализа. Это может быть один или несколько элементов DateTimeStyles перечисления, как описано в следующей таблице.

Член DateTimeStyles Описание
AdjustToUniversal Анализирует s и при необходимости преобразует его в UTC. Если s включает смещение часового пояса или s не содержит сведений о часовом поясе, но styles содержит DateTimeStyles.AssumeLocal флаг, метод анализирует строку, вызывает ToUniversalTime преобразование возвращаемого DateTime значения в формате UTC и задает для свойства значение KindDateTimeKind.Utc. Если s указывает, что он представляет UTC, или s не содержит сведений о часовом поясе, но styles включает флаг DateTimeStyles.AssumeUniversal, метод анализирует строку, не выполняет преобразование часового пояса для возвращаемого значения DateTime и устанавливает для свойства Kind значение DateTimeKind.Utc. Во всех остальных случаях флаг не действует.
AllowInnerWhite Хотя допустимо, это значение игнорируется. В элементах даты и времени s допускается внутренний пробел.
AllowLeadingWhite Хотя допустимо, это значение игнорируется. В элементах s даты и времени допускаются ведущие пробелы.
AllowTrailingWhite Хотя допустимо, это значение игнорируется. Конечный пробел разрешен в элементах даты и времени s.
AllowWhiteSpaces Указывает, что s может содержать начальные, внутренние и конечные пробелы. Это поведение по умолчанию. Его нельзя переопределить, указав более строгое DateTimeStyles значение перечисления, например DateTimeStyles.None.
AssumeLocal Указывает, что если s нет сведений часового пояса, предполагается, что он представляет локальное время. Если DateTimeStyles.AdjustToUniversal флаг отсутствует, Kind для свойства возвращаемого DateTime значения задано значение DateTimeKind.Local.
AssumeUniversal Указывает, что если s нет сведений о часовом поясе, предполагается, что он представляет UTC. Если DateTimeStyles.AdjustToUniversal флаг отсутствует, метод преобразует возвращаемое DateTime значение из UTC в местное время и задает для свойства значение KindDateTimeKind.Local.
None Хотя допустимо, это значение игнорируется.
RoundtripKind Для строк, содержащих сведения о часовом поясе, пытается предотвратить преобразование строки даты и времени в значение DateTime, у которого свойство Kind установлено в DateTimeKind.Local. Как правило, такая строка создается путем вызова DateTime.ToString(String) метода с помощью описателей формата "o", "r" или "u".

Если s не содержит информацию о часовом поясе, метод DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) возвращает значение, чьё свойство DateTime равно Kind, если не указан флаг DateTimeKind.Unspecified. Если s включает сведения о часовом поясе или смещении часового пояса, метод DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) выполняет все необходимые преобразования времени и возвращает одно из следующих элементов:

  • DateTime Значение, дата и время которого отражают местное время и свойство которого Kind .DateTimeKind.Local
  • Или, если styles включает флаг AdjustToUniversal, значение DateTime, дата и время которого установлены в формате UTC, а свойство Kind имеет значение DateTimeKind.Utc.

Это поведение можно переопределить с помощью флага DateTimeStyles.RoundtripKind .

Анализ пользовательских региональных параметров

Если вы анализируете строку даты и времени, созданную для пользовательского языка и региональных параметров, используйте TryParseExact метод вместо TryParse метода, чтобы повысить вероятность успешности операции синтаксического анализа. Пользовательская строка даты и времени может быть сложной и трудной для анализа. Метод TryParse пытается проанализировать строку с несколькими неявными шаблонами синтаксического анализа, все из которых могут завершиться ошибкой. Напротив, метод требует явного обозначения одного или нескольких точных шаблонов синтаксического анализа, которые, скорее всего, TryParseExact будут успешными.

Дополнительные сведения о пользовательских языках и региональных параметрах см. в System.Globalization.CultureAndRegionInfoBuilder классе.