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


Метод 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 . Дата и время можно заключить в скобки с парой начальных и конечных символов NU МБ ER SIGN ('#, U+0023), а также использовать один или несколько символов 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 Description
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 значение со значением, заданным DateTimeKind.LocalсвойствомKind. Как правило, такая строка создается путем вызова DateTime.ToString(String) метода с помощью описателей формата "o", "r" или "u".

Если s данные часового DateTime пояса отсутствуют, метод возвращает значение, DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) свойство которого Kind не styles указано 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 классе.