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


DateTime.Parse Метод

Определение

Преобразует строковое представление даты и времени в его DateTime эквивалент.

Перегрузки

Имя Описание
Parse(String)

Преобразует строковое представление даты и времени в его DateTime эквивалент с помощью соглашений текущего языка и региональных параметров.

Parse(ReadOnlySpan<Char>, IFormatProvider)

Анализирует диапазон символов в значение.

Parse(String, IFormatProvider)

Преобразует строковое представление даты и времени в его DateTime эквивалент с помощью сведений о формате, зависящих от языка и региональных параметров.

Parse(ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles)

Преобразует диапазон памяти, содержащий строковое представление даты и времени в его DateTime эквивалент, используя сведения о формате, зависящее от языка и региональных параметров, и стиль форматирования.

Parse(String, IFormatProvider, DateTimeStyles)

Преобразует строковое представление даты и времени в его DateTime эквивалент, используя сведения о формате, зависящие от языка и региональных параметров, и стиль форматирования.

Примеры

Многочисленные примеры, которые вызывают метод, перемежаются в разделе "Примечания" DateTime.Parse этой статьи и в документации по отдельным DateTime.Parse перегрузкам.

Вы также можете скачать полный набор примеров, включенных DateTime.Parse в проект .NET Core для C#.

Комментарии

В этом разделе:

Какой метод вызывается?

Кому Звать
Анализ строки даты и времени с помощью соглашений текущего языка и региональных параметров. Parse(String) перегрузка
Анализ строки даты и времени с помощью соглашений определенного языка и региональных параметров. Parse(String, IFormatProvider) перегрузка (см. анализ и культурные конвенции)
Анализ строки даты и времени со специальными элементами стиля (например, пробелами или пробелами). Parse(String, IFormatProvider, DateTimeStyles) перегрузка
Анализ строки даты и времени, которая должна быть в определенном формате. DateTime.ParseExact или DateTime.TryParseExact
Анализ строки даты и времени и преобразование в utc или локальное время. Parse(String, IFormatProvider, DateTimeStyles) перегрузка
Анализ строки даты и времени без обработки исключений. DateTime.TryParseМетод
Восстановление (круговая поездка) значения даты и времени, созданного операцией форматирования. Передайте строку стандартного ToString(String) формата "o" или "r" методу и вызовите перегрузку Parse(String, IFormatProvider, DateTimeStyles) с помощью DateTimeStyles.RoundtripKind
Анализ строки даты и времени в фиксированном формате между границами компьютера (и, возможно, культурных) . DateTime.ParseExact или DateTime.TryParseExact метод

Строка для синтаксического анализа

Метод Parse пытается преобразовать строковое представление значения даты и времени в его DateTime эквивалент. Он пытается полностью проанализировать входную строку без исключения FormatException . При использовании перегрузки, которые принимают IFormatProvider объект, он будет использоваться для синтаксического анализа StringToParse. Если такой объект не указан, CurrentCulture вместо этого будет использоваться.

Важный

Если операция синтаксического анализа завершается ошибкой из-за нераспознанного формата строки, Parse метод вызывает FormatExceptionисключение, а TryParse метод возвращает false. Так как обработка исключений может быть дорогой, следует использовать Parse при успешном выполнении операции синтаксического анализа, так как источник входных данных является доверенным. TryParse предпочтительнее при сбое синтаксического анализа, особенно из-за того, что входной источник не является доверенным, или у вас есть разумные значения по умолчанию для замены строк, которые не успешно анализируются.

Строка для синтаксического анализа может принимать любую из следующих форм:

  • Строка с датой и компонентом времени.

  • Строка с датой, но без компонента времени. Если компонент времени отсутствует, метод предполагает 12:00 полуночи. Если компонент даты имеет двухзначный год, он преобразуется в год на Calendar.TwoDigitYearMax основе текущего календаря языка и региональных параметров или текущего календаря указанного языка и региональных параметров (если используется перегрузка с аргументом, не имеющим значения NULL provider ).

  • Строка с компонентом даты, включающая только месяц и год, но не компонент дня. Метод предполагает первый день месяца.

  • Строка с компонентом даты, которая включает только месяц и день, но не компонент года. Метод предполагает текущий год.

  • Строка с временем, но без компонента даты. Метод предполагает текущую дату, если вы не вызываете Parse(String, IFormatProvider, DateTimeStyles) перегрузку и включаете DateTimeStyles.NoCurrentDateDefault в styles аргумент, в этом случае метод предполагает дату 1 января 0001 года.

  • Строка с компонентом времени, который включает только час и конструктор AM/PM без компонента даты. Метод предполагает текущую дату и время без минут и секунд. Это поведение можно изменить, вызвав перегрузку Parse(String, IFormatProvider, DateTimeStyles) и включив DateTimeStyles.NoCurrentDateDefault в styles аргумент, в этом случае метод предполагает дату 1 января 0001 года.

  • Строка, содержащая сведения о часовом поясе и соответствующую стандарту ISO 8601. В следующих примерах первая строка обозначает координированное универсальное время (UTC), а вторая — время в часовом поясе, ранее чем в формате UTC:

    "2008-11-01T19:35:000.000000Z" "2008-11-01T19:35:000000000-07:000"

  • Строка, содержащая конструктор GMT и соответствует формату времени RFC 1123; Например:

    "Sat, 01 ноябрь 2008 19:35:00 GMT"

  • Строка, содержащая дату и время, а также сведения о смещение часового пояса; Например:

    "03/01/2009 05:42:00 -5:00"

В следующем примере выполняется анализ строк в каждом из этих форматов с помощью соглашений о форматировании текущего языка и региональных параметров, которые в данном случае являются языком и региональными параметрами en-US:

using System;

public class Example
{
   public static void Main()
   {
      (string dateAsString, string description)[]  dateInfo = { ("08/18/2018 07:22:16", "String with a date and time component"),
                                                                ("08/18/2018", "String with a date component only"),
                                                                ("8/2018", "String with a month and year component only"),
                                                                ("8/18", "String with a month and day component only"),
                                                                ("07:22:16", "String with a time component only"),
                                                                ("7 PM", "String with an hour and AM/PM designator only"),
                                                                ("2018-08-18T07:22:16.0000000Z", "UTC string that conforms to ISO 8601"),
                                                                ("2018-08-18T07:22:16.0000000-07:00", "Non-UTC string that conforms to ISO 8601"),
                                                                ("Sat, 18 Aug 2018 07:22:16 GMT", "String that conforms to RFC 1123"),
                                                                ("08/18/2018 07:22:16 -5:00", "String with date, time, and time zone information" ) };

      Console.WriteLine($"Today is {DateTime.Now:d}\n");

      foreach (var item in dateInfo) {
         Console.WriteLine($"{item.description + ":",-52} '{item.dateAsString}' --> {DateTime.Parse(item.dateAsString)}");
      }
   }
}
// The example displays output like the following:
//   Today is 2/22/2018
//
//   String with a date and time component:               '08/18/2018 07:22:16' --> 8/18/2018 7:22:16 AM
//   String with a date component only:                   '08/18/2018' --> 8/18/2018 12:00:00 AM
//   String with a month and year component only:         '8/2018' --> 8/1/2018 12:00:00 AM
//   String with a month and day component only:          '8/18' --> 8/18/2018 12:00:00 AM
//   String with a time component only:                   '07:22:16' --> 2/22/2018 7:22:16 AM
//   String with an hour and AM/PM designator only:       '7 PM' --> 2/22/2018 7:00:00 PM
//   UTC string that conforms to ISO 8601:                '2018-08-18T07:22:16.0000000Z' --> 8/18/2018 12:22:16 AM
//   Non-UTC string that conforms to ISO 8601:            '2018-08-18T07:22:16.0000000-07:00' --> 8/18/2018 7:22:16 AM
//   String that conforms to RFC 1123:                    'Sat, 18 Aug 2018 07:22:16 GMT' --> 8/18/2018 12:22:16 AM
//   String with date, time, and time zone information:   '08/18/2018 07:22:16 -5:00' --> 8/18/2018 5:22:16 AM
module Parse6

open System

let  dateInfo = 
    [ "08/18/2018 07:22:16", "String with a date and time component"
      "08/18/2018", "String with a date component only"
      "8/2018", "String with a month and year component only"
      "8/18", "String with a month and day component only"
      "07:22:16", "String with a time component only"
      "7 PM", "String with an hour and AM/PM designator only"
      "2018-08-18T07:22:16.0000000Z", "UTC string that conforms to ISO 8601"
      "2018-08-18T07:22:16.0000000-07:00", "Non-UTC string that conforms to ISO 8601"
      "Sat, 18 Aug 2018 07:22:16 GMT", "String that conforms to RFC 1123"
      "08/18/2018 07:22:16 -5:00", "String with date, time, and time zone information" ]

printfn $"Today is {DateTime.Now:d}\n"

for dateAsString, description in dateInfo do
    printfn $"""{description + ":",-52} '{dateAsString}' --> {DateTime.Parse(dateAsString)}"""


// The example displays output like the following:
//   Today is 2/22/2018
//
//   String with a date and time component:               '08/18/2018 07:22:16' --> 8/18/2018 7:22:16 AM
//   String with a date component only:                   '08/18/2018' --> 8/18/2018 12:00:00 AM
//   String with a month and year component only:         '8/2018' --> 8/1/2018 12:00:00 AM
//   String with a month and day component only:          '8/18' --> 8/18/2018 12:00:00 AM
//   String with a time component only:                   '07:22:16' --> 2/22/2018 7:22:16 AM
//   String with an hour and AM/PM designator only:       '7 PM' --> 2/22/2018 7:00:00 PM
//   UTC string that conforms to ISO 8601:                '2018-08-18T07:22:16.0000000Z' --> 8/18/2018 12:22:16 AM
//   Non-UTC string that conforms to ISO 8601:            '2018-08-18T07:22:16.0000000-07:00' --> 8/18/2018 7:22:16 AM
//   String that conforms to RFC 1123:                    'Sat, 18 Aug 2018 07:22:16 GMT' --> 8/18/2018 12:22:16 AM
//   String with date, time, and time zone information:   '08/18/2018 07:22:16 -5:00' --> 8/18/2018 5:22:16 AM

Public Module Strings
   Public Sub Main()
      Dim dateInfo() As (dateAsString As String, description As String) = 
                     { ("08/18/2018 07:22:16", "String with a date and time component"),
                       ("08/18/2018", "String with a date component only"),
                       ("8/2018", "String with a month and year component only"),
                       ("8/18", "String with a month and day component only"),
                       ("07:22:16", "String with a time component only"),
                       ("7 PM", "String with an hour and AM/PM designator only"),
                       ("2018-08-18T07:22:16.0000000Z", "UTC string that conforms to ISO 8601"),   
                       ("2018-08-18T07:22:16.0000000-07:00", "Non-UTC string that conforms to ISO 8601"),
                       ("Sat, 18 Aug 2018 07:22:16 GMT", "String that conforms to RFC 1123"),
                       ("08/18/2018 07:22:16 -5:00", "String with date, time, and time zone information" ) }
   
      Console.WriteLine($"Today is {Date.Now:d}{vbCrLf}")
      
      For Each item in dateInfo
         Console.WriteLine($"{item.description + ":",-52} '{item.dateAsString}' --> {DateTime.Parse(item.dateAsString)}")        
      Next
   End Sub
End Module
' The example displays output like the following:
'   Today is 2/22/2018
'   
'   String with a date and time component:               '08/18/2018 07:22:16' --> 8/18/2018 7:22:16 AM
'   String with a date component only:                   '08/18/2018' --> 8/18/2018 12:00:00 AM
'   String with a month and year component only:         '8/2018' --> 8/1/2018 12:00:00 AM
'   String with a month and day component only:          '8/18' --> 8/18/2018 12:00:00 AM
'   String with a time component only:                   '07:22:16' --> 2/22/2018 7:22:16 AM
'   String with an hour and AM/PM designator only:       '7 PM' --> 2/22/2018 7:00:00 PM
'   UTC string that conforms to ISO 8601:                '2018-08-18T07:22:16.0000000Z' --> 8/18/2018 12:22:16 AM
'   Non-UTC string that conforms to ISO 8601:            '2018-08-18T07:22:16.0000000-07:00' --> 8/18/2018 7:22:16 AM
'   String that conforms to RFC 1123:                    'Sat, 18 Aug 2018 07:22:16 GMT' --> 8/18/2018 12:22:16 AM
'   String with date, time, and time zone information:   '08/18/2018 07:22:16 -5:00' --> 8/18/2018 5:22:16 AM

Если входная строка представляет високосный день в високосном году в календаре, используемом методом синтаксического анализа (см. синтаксические и культурные соглашения), Parse метод успешно анализирует строку. Если входная строка представляет високосный день в непрыжный год, метод вызывает исключение FormatException.

Parse Так как метод пытается проанализировать строковое представление даты и времени с помощью правил форматирования текущего или указанного языка и региональных параметров, попытка проанализировать строку в разных языках и региональных параметрах может завершиться ошибкой. Чтобы проанализировать определенный формат даты и времени в разных языковых стандартах, используйте одну из перегрузок DateTime.ParseExact метода и укажите описатель формата.

Анализ и культурные соглашения

Все перегрузки Parse метода чувствительны к языку и региональных параметров, если строка, которую не нужно проанализировать (которая представлена s в следующей таблице), соответствует шаблону ISO 8601. Операция синтаксического анализа использует сведения о форматировании в объекте DateTimeFormatInfo , производном следующим образом:

Важный

Эры в японских календарях основаны на царствии императора и поэтому, как ожидается, изменятся. Например, 1 мая 2019 г. отмечено начало эпохи Reiwa в JapaneseCalendar и JapaneseLunisolarCalendar. Такое изменение эпохи влияет на все приложения, использующие эти календари. Для получения дополнительной информации и определения влияния на ваши приложения см. статью Обработка новой эпохи в японском календаре в .NET. Сведения о тестировании ваших приложений на системах Windows для обеспечения их готовности к изменению эпохи см. в разделе Подготовка приложения к изменению японской эпохи. Функции в .NET, поддерживающие календари с несколькими эрами, и рекомендации по работе с календарями, поддерживающими несколько эпох, см. в разделе Работа с эрами.

При вызове И provider есть Сведения о форматировании являются производными от
Parse(String) - Текущий язык и региональные параметры (DateTimeFormatInfo.CurrentInfo свойство)
Parse(String, IFormatProvider) или Parse(String, IFormatProvider, DateTimeStyles) объект DateTimeFormatInfo; Указанный DateTimeFormatInfo объект
Parse(String, IFormatProvider) или Parse(String, IFormatProvider, DateTimeStyles) null Текущий язык и региональные параметры (DateTimeFormatInfo.CurrentInfo свойство)
Parse(String, IFormatProvider) или Parse(String, IFormatProvider, DateTimeStyles) объект CultureInfo; Свойство CultureInfo.DateTimeFormat
Parse(String, IFormatProvider) или Parse(String, IFormatProvider, DateTimeStyles) Настраиваемая IFormatProvider реализация Метод IFormatProvider.GetFormat

При получении сведений DateTimeFormatInfo о форматировании, производных от объекта, свойство определяет календарь, DateTimeFormatInfo.Calendar используемый в операции синтаксического анализа.

Если вы анализируете строку даты и времени с помощью DateTimeFormatInfo объекта с настраиваемыми параметрами, отличающимися от стандартного языка и региональных параметров, используйте ParseExact метод вместо Parse метода, чтобы повысить вероятность успешного преобразования. Нестандартная строка даты и времени может быть сложной и сложной для анализа. Метод Parse пытается проанализировать строку с несколькими неявными шаблонами синтаксического анализа, все из которых могут завершиться ошибкой. Напротив, метод требует явного обозначения одного или нескольких точных шаблонов синтаксического анализа, которые, скорее всего, ParseExact будут успешными. Дополнительные сведения см. в разделе "DateTimeFormatInfo и Динамические DateTimeFormatInfo данные".

Важный

Обратите внимание, что соглашения о форматировании для определенного языка и региональных параметров являются динамическими и могут быть изменены. Это означает, что операции синтаксического анализа, зависящие от соглашений о форматировании языка и региональных параметров по умолчанию (current) или указывающие IFormatProvider объект, представляющий язык и региональные параметры, отличные от инвариантного языка и региональных параметров, может неожиданно завершиться ошибкой, если возникает какая-либо из следующих ситуаций:

  • Данные, относящиеся к языку и региональным параметрам, изменились между основными или дополнительными версиями .NET Framework или в результате обновления существующей версии .NET Framework.
  • Данные, относящиеся к языку и региональным параметрам, отражают предпочтения пользователей, которые могут отличаться от компьютера до компьютера или сеанса на сеанс.
  • Данные, относящиеся к языку и региональным параметрам, представляют собой язык и региональные параметры, которые переопределяют параметры стандартного языка и региональных параметров или пользовательского языка и региональных параметров.

Чтобы предотвратить трудности при анализе данных и строк времени, связанных с изменениями в культурных данных, можно проанализировать строки даты и времени с помощью инвариантного языка и региональных параметров, или вызвать ParseExact или TryParseExact метод и указать точный формат строки для анализа. При сериализации и десериализации данных даты и времени можно использовать соглашения о форматировании инвариантного языка и региональных параметров или сериализовать и десериализировать DateTime значение в двоичном формате.

Дополнительные сведения см. в разделе "Динамические региональные данные" раздела CultureInfo и раздела "Сохранение значений DateTime" в DateTime разделе.

Синтаксический анализ и элементы стиля

Все Parse перегрузки игнорируют начальные, внутренние или конечные пробелы в входной строке (которая представлена s в следующей таблице). Дата и время можно заключить в скобки с парой начальных и конечных символов ЗНАКА НОМЕРА ("#", U+0023) и иметь один или несколько символов NULL (U+0000).

Кроме того, перегрузка Parse(String, IFormatProvider, DateTimeStyles) имеет styles параметр, состоящий из одного или нескольких элементов DateTimeStyles перечисления. Этот параметр определяет способ s интерпретации и способ преобразования операции s синтаксического анализа в дату и время. В следующей таблице описывается влияние каждого DateTimeStyles элемента на операцию синтаксического анализа.

Элемент DateTimeStyles Влияние на преобразование
AdjustToUniversal Синтаксический s анализ и при необходимости преобразует его в формате UTC следующим образом:

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

Возвращаемое значение и DateTime.Kind

Перегрузки DateTime.Parse возвращают DateTime значение, свойство которого Kind содержит сведения о часовом поясе. Это может указывать на то, что время:

Как правило, метод возвращает объект, Parse свойство которого Kind имеет значениеDateTimeKind.Unspecified.DateTime Parse Однако метод также может выполнять преобразование часового пояса и задавать значение Kind свойства по-разному в зависимости от значений s и styles параметров:

Если Преобразование часового пояса Свойство Kind
s содержит сведения о часовом поясе. Дата и время преобразуются в время в местном часовом поясе. DateTimeKind.Local
sсодержит сведения о часовом поясе AdjustToUniversal и styles включает флаг. Дата и время преобразуются в согласованное универсальное время (UTC). DateTimeKind.Utc
s содержит конструктор часового пояса Z или GMT и styles включает RoundtripKind флаг. Дата и время интерпретируются как UTC. DateTimeKind.Utc

В следующем примере строки даты, содержащие сведения часового пояса, преобразуются в время в местном часовом поясе:

using System;

public class Example
{
   public static void Main()
   {
      string[] dateStrings = {"2008-05-01T07:34:42-5:00",
                              "2008-05-01 7:34:42Z",
                              "Thu, 01 May 2008 07:34:42 GMT"};
      foreach (string dateString in dateStrings)
      {
         DateTime convertedDate = DateTime.Parse(dateString);
         Console.WriteLine($"Converted {dateString} to {convertedDate.Kind} time {convertedDate}");
      }
   }
}
// These calls to the DateTime.Parse method display the following output:
//  Converted 2008-05-01T07:34:42-5:00 to Local time 5/1/2008 5:34:42 AM
//  Converted 2008-05-01 7:34:42Z to Local time 5/1/2008 12:34:42 AM
//  Converted Thu, 01 May 2008 07:34:42 GMT to Local time 5/1/2008 12:34:42 AM
open System

let dateStrings = 
    [ "2008-05-01T07:34:42-5:00"
      "2008-05-01 7:34:42Z"
      "Thu, 01 May 2008 07:34:42 GMT" ]

for dateString in dateStrings do
    let convertedDate = DateTime.Parse dateString
    printfn $"Converted {dateString} to {convertedDate.Kind} time {convertedDate}"

// These calls to the DateTime.Parse method display the following output:
//  Converted 2008-05-01T07:34:42-5:00 to Local time 5/1/2008 5:34:42 AM
//  Converted 2008-05-01 7:34:42Z to Local time 5/1/2008 12:34:42 AM
//  Converted Thu, 01 May 2008 07:34:42 GMT to Local time 5/1/2008 12:34:42 AM
Module Example
   Public Sub Main()
      Dim dateStrings() As String = {"2008-05-01T07:34:42-5:00", 
                                     "2008-05-01 7:34:42Z", 
                                     "Thu, 01 May 2008 07:34:42 GMT"}
      
      For Each dateStr In dateStrings
         Dim convertedDate As Date = Date.Parse(dateStr)
         Console.WriteLine($"Converted {dateStr} to {convertedDate.Kind} time {convertedDate}")
      Next 
   End Sub
End Module
' These calls to the DateTime.Parse method display the following output:
'   Converted 2008-05-01T07:34:42-5:00 to Local time 5/1/2008 5:34:42 AM
'   Converted 2008-05-01 7:34:42Z to Local time 5/1/2008 12:34:42 AM
'   Converted Thu, 01 May 2008 07:34:42 GMT to Local time 5/1/2008 12:34:42 AM

Можно также сохранить значение свойства даты и времени Kind во время операции форматирования и синтаксического анализа с помощью флага DateTimeStyles.RoundtripKind . В следующем примере показано, как RoundtripKind флаг влияет на операцию DateTime синтаксического анализа значений, преобразованных в строки с помощью описателя формата O, R или U.

   string[] formattedDates = { "2008-09-15T09:30:41.7752486-07:00",
                               "2008-09-15T09:30:41.7752486Z",
                               "2008-09-15T09:30:41.7752486",
                               "2008-09-15T09:30:41.7752486-04:00",
                               "Mon, 15 Sep 2008 09:30:41 GMT" };
   foreach (string formattedDate in formattedDates)
   {
      Console.WriteLine(formattedDate);
      DateTime roundtripDate = DateTime.Parse(formattedDate, null,
                                              DateTimeStyles.RoundtripKind);
      Console.WriteLine($"   With RoundtripKind flag: {roundtripDate} {roundtripDate.Kind} time.");

      DateTime noRoundtripDate = DateTime.Parse(formattedDate, null,
                                                DateTimeStyles.None);
      Console.WriteLine($"   Without RoundtripKind flag: {noRoundtripDate} {noRoundtripDate.Kind} time.");
   }
// The example displays the following output:
//       2008-09-15T09:30:41.7752486-07:00
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Local time.
//          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Local time.
//       2008-09-15T09:30:41.7752486Z
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Utc time.
//          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.
//       2008-09-15T09:30:41.7752486
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
//          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
//       2008-09-15T09:30:41.7752486-04:00
//          With RoundtripKind flag: 9/15/2008 6:30:41 AM Local time.
//          Without RoundtripKind flag: 9/15/2008 6:30:41 AM Local time.
//       Mon, 15 Sep 2008 09:30:41 GMT
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Utc time.
//          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.
let formattedDates = 
    [ "2008-09-15T09:30:41.7752486-07:00"
      "2008-09-15T09:30:41.7752486Z"
      "2008-09-15T09:30:41.7752486"
      "2008-09-15T09:30:41.7752486-04:00"
      "Mon, 15 Sep 2008 09:30:41 GMT" ]

for formattedDate in formattedDates do
    printfn $"{formattedDate}"
    let roundtripDate = DateTime.Parse(formattedDate, null, DateTimeStyles.RoundtripKind)
    printfn $"   With RoundtripKind flag: {roundtripDate} {roundtripDate.Kind} time."

    let noRoundtripDate = DateTime.Parse(formattedDate, null, DateTimeStyles.None)
    printfn $"   Without RoundtripKind flag: {noRoundtripDate} {noRoundtripDate.Kind} time."

// The example displays the following output:
//       2008-09-15T09:30:41.7752486-07:00
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Local time.
//          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Local time.
//       2008-09-15T09:30:41.7752486Z
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Utc time.
//          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.
//       2008-09-15T09:30:41.7752486
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
//          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
//       2008-09-15T09:30:41.7752486-04:00
//          With RoundtripKind flag: 9/15/2008 6:30:41 AM Local time.
//          Without RoundtripKind flag: 9/15/2008 6:30:41 AM Local time.
//       Mon, 15 Sep 2008 09:30:41 GMT
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Utc time.
//          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.
Dim formattedDates() = { "2008-09-15T09:30:41.7752486-07:00", 
                           "2008-09-15T09:30:41.7752486Z",  
                           "2008-09-15T09:30:41.7752486",  
                           "2008-09-15T09:30:41.7752486-04:00", 
                           "Mon, 15 Sep 2008 09:30:41 GMT" }
For Each formattedDate In formattedDates
   Console.WriteLine(formattedDate)
   Dim roundtripDate = DateTime.Parse(formattedDate, Nothing,  
                                      DateTimeStyles.RoundtripKind)                        
   Console.WriteLine($"   With RoundtripKind flag: {roundtripDate} {roundtripDate.Kind} time.")                                          
   Dim noRoundtripDate = DateTime.Parse(formattedDate, Nothing,                                                                                                  DateTimeStyles.None)
   Console.WriteLine($"   Without RoundtripKind flag: {noRoundtripDate} {noRoundtripDate.Kind} time.")
Next         
' The example displays the following output:
'       2008-09-15T09:30:41.7752486-07:00
'          With RoundtripKind flag: 9/15/2008 9:30:41 AM Local time.
'          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Local time.
'       2008-09-15T09:30:41.7752486Z
'          With RoundtripKind flag: 9/15/2008 9:30:41 AM Utc time.
'          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.
'       2008-09-15T09:30:41.7752486
'          With RoundtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
'          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
'       2008-09-15T09:30:41.7752486-04:00
'          With RoundtripKind flag: 9/15/2008 6:30:41 AM Local time.
'          Without RoundtripKind flag: 9/15/2008 6:30:41 AM Local time.
'       Mon, 15 Sep 2008 09:30:41 GMT
'          With RoundtripKind flag: 9/15/2008 9:30:41 AM Utc time.
'          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.

Parse(String)

Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs

Преобразует строковое представление даты и времени в его DateTime эквивалент с помощью соглашений текущего языка и региональных параметров.

public:
 static DateTime Parse(System::String ^ s);
public static DateTime Parse(string s);
static member Parse : string -> DateTime
Public Shared Function Parse (s As String) As DateTime

Параметры

s
String

Строка, содержащая дату и время преобразования. Дополнительные сведения см . в строке для анализа .

Возвращаемое значение

Объект, эквивалентный дате и времени, который содержится в s.

Исключения

s равно null.

s не содержит допустимое строковое представление даты и времени.

Примеры

В следующем примере анализируется строковое представление нескольких значений даты и времени:

  • Использование поставщика формата по умолчанию, предоставляющего соглашения о форматировании текущего языка и региональных параметров компьютера, используемого для создания примера выходных данных. Выходные данные из этого примера отражают соглашения о форматировании языка и региональных параметров en-US.

  • Использование значения стиля по умолчанию, которое является AllowWhiteSpaces.

Он обрабатывает исключение, которое возникает FormatException при попытке метода проанализировать строковое представление даты и времени с помощью некоторых соглашений о форматировании других региональных параметров. В нем также показано, как успешно проанализировать значение даты и времени, которое не использует соглашения о форматировании текущего языка и региональных параметров.

using System;
using System.Globalization;

public class DateTimeParser
{
   public static void Main()
   {
      // Assume the current culture is en-US.
      // The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.

      // Use standard en-US date and time value
      DateTime dateValue;
      string dateString = "2/16/2008 12:15:12 PM";
      try {
         dateValue = DateTime.Parse(dateString);
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert '{0}'.", dateString);
      }

      // Reverse month and day to conform to the fr-FR culture.
      // The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.
      dateString = "16/02/2008 12:15:12";
      try {
         dateValue = DateTime.Parse(dateString);
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert '{0}'.", dateString);
      }

      // Call another overload of Parse to successfully convert string
      // formatted according to conventions of fr-FR culture.
      try {
         dateValue = DateTime.Parse(dateString, new CultureInfo("fr-FR", false));
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert '{0}'.", dateString);
      }

      // Parse string with date but no time component.
      dateString = "2/16/2008";
      try {
         dateValue = DateTime.Parse(dateString);
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert '{0}'.", dateString);
      }
   }
}
// The example displays the following output to the console:
//       '2/16/2008 12:15:12 PM' converted to 2/16/2008 12:15:12 PM.
//       Unable to convert '16/02/2008 12:15:12'.
//       '16/02/2008 12:15:12' converted to 2/16/2008 12:15:12 PM.
//       '2/16/2008' converted to 2/16/2008 12:00:00 AM.
open System
open System.Globalization

[<EntryPoint>]
let main _ =
    // Assume the current culture is en-US.
    // The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.

    // Use standard en-US date and time value
    let dateString = "2/16/2008 12:15:12 PM"
    try
        let dateValue = DateTime.Parse dateString
        printfn $"'{dateString}' converted to {dateValue}."
    with :? FormatException ->
        printfn $"Unable to convert '{dateString}'."

    // Reverse month and day to conform to the fr-FR culture.
    // The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.
    let dateString = "16/02/2008 12:15:12"
    try
        let dateValue = DateTime.Parse dateString
        printfn $"'{dateString}' converted to {dateValue}."
    with :? FormatException ->
        Console.WriteLine("Unable to convert '{0}'.", dateString)

    // Call another overload of Parse to successfully convert string
    // formatted according to conventions of fr-FR culture.
    try
        let dateValue = DateTime.Parse(dateString, CultureInfo("fr-FR", false))
        printfn $"'{dateString}' converted to {dateValue}."
    with :? FormatException ->
        printfn $"Unable to convert '{dateString}'."

    // Parse string with date but no time component.
    let dateString = "2/16/2008"
    try
        let dateValue = DateTime.Parse dateString
        printfn $"'{dateString}' converted to {dateValue}."
    with :? FormatException ->
        printfn $"Unable to convert '{dateString}'."

    0

// The example displays the following output to the console:
//       '2/16/2008 12:15:12 PM' converted to 2/16/2008 12:15:12 PM.
//       Unable to convert '16/02/2008 12:15:12'.
//       '16/02/2008 12:15:12' converted to 2/16/2008 12:15:12 PM.
//       '2/16/2008' converted to 2/16/2008 12:00:00 AM.
Imports System.Globalization

Class DateTimeParser
   Public Shared Sub Main()
      ' Assume the current culture is en-US. 
      ' The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.

      ' Use standard en-US date and time value
      Dim dateValue As Date
      Dim dateString As String = "2/16/2008 12:15:12 PM"
      Try
         dateValue = Date.Parse(dateString)
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", dateString)
      End Try
            
      ' Reverse month and day to conform to the fr-FR culture.
      ' The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.
      dateString = "16/02/2008 12:15:12"
      Try
         dateValue = Date.Parse(dateString)
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", dateString)
      End Try

      ' Call another overload of Parse to successfully convert string
      ' formatted according to conventions of fr-FR culture.      
      Try
         dateValue = Date.Parse(dateString, New CultureInfo("fr-FR", False))
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", dateString)
      End Try
      
      ' Parse string with date but no time component.
      dateString = "2/16/2008"
      Try
         dateValue = Date.Parse(dateString)
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", dateString)
      End Try
   End Sub 
End Class 
' The example displays the following output to the console:
'       '2/16/2008 12:15:12 PM' converted to 2/16/2008 12:15:12 PM.
'       Unable to convert '16/02/2008 12:15:12'.
'       '16/02/2008 12:15:12' converted to 2/16/2008 12:15:12 PM.
'       '2/16/2008' converted to 2/16/2008 12:00:00 AM.

Комментарии

Если s содержит сведения часового DateTime пояса, этот метод возвращает значение, свойство которого Kind является DateTimeKind.Local и преобразует дату и время в s местное время. В противном случае он не выполняет преобразование часового DateTime пояса и возвращает значение, свойство которого Kind имеет значение DateTimeKind.Unspecified.

Эта перегрузка пытается проанализировать s с помощью соглашений о форматировании текущего языка и региональных параметров. Текущий язык и региональные параметры указываются свойством CurrentCulture . Чтобы проанализировать строку с помощью соглашений о форматировании определенного языка и региональных параметров, вызовите Parse(String, IFormatProvider) или Parse(String, IFormatProvider, DateTimeStyles) перегрузки.

Эта перегрузка пытается проанализировать s с помощью DateTimeStyles.AllowWhiteSpaces стиля.

См. также раздел

Применяется к

Parse(ReadOnlySpan<Char>, IFormatProvider)

Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs

Анализирует диапазон символов в значение.

public:
 static DateTime Parse(ReadOnlySpan<char> s, IFormatProvider ^ provider) = ISpanParsable<DateTime>::Parse;
public static DateTime Parse(ReadOnlySpan<char> s, IFormatProvider? provider);
static member Parse : ReadOnlySpan<char> * IFormatProvider -> DateTime
Public Shared Function Parse (s As ReadOnlySpan(Of Char), provider As IFormatProvider) As DateTime

Параметры

s
ReadOnlySpan<Char>

Диапазон символов для синтаксического анализа.

provider
IFormatProvider

Объект, предоставляющий сведения о форматировании, зависящее от sязыка и региональных параметров.

Возвращаемое значение

Результат синтаксического анализа s.

Реализации

Применяется к

Parse(String, IFormatProvider)

Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs

Преобразует строковое представление даты и времени в его DateTime эквивалент с помощью сведений о формате, зависящих от языка и региональных параметров.

public:
 static DateTime Parse(System::String ^ s, IFormatProvider ^ provider);
public:
 static DateTime Parse(System::String ^ s, IFormatProvider ^ provider) = IParsable<DateTime>::Parse;
public static DateTime Parse(string s, IFormatProvider provider);
public static DateTime Parse(string s, IFormatProvider? provider);
static member Parse : string * IFormatProvider -> DateTime
Public Shared Function Parse (s As String, provider As IFormatProvider) As DateTime

Параметры

s
String

Строка, содержащая дату и время преобразования. Дополнительные сведения см . в строке для анализа .

provider
IFormatProvider

Объект, предоставляющий сведения о sформате, зависящее от языка и региональных параметров. См. разделы "Анализ и культурные соглашения"

Возвращаемое значение

Объект, эквивалентный дате и времени, указанному s в providerсоответствии с указанным.

Реализации

Исключения

s равно null.

s не содержит допустимое строковое представление даты и времени.

Примеры

В следующем примере выполняется анализ массива строк даты с помощью соглашений en-US, fr-FRи региональных параметров de-DE. В нем показано, что строковые представления одной даты можно интерпретировать по-разному в разных языках и региональных параметрах.

using System;
using System.Globalization;

public class ParseDate
{
   public static void Main()
   {
      // Define cultures to be used to parse dates.
      CultureInfo[] cultures = {CultureInfo.CreateSpecificCulture("en-US"),
                                CultureInfo.CreateSpecificCulture("fr-FR"),
                                CultureInfo.CreateSpecificCulture("de-DE")};
      // Define string representations of a date to be parsed.
      string[] dateStrings = {"01/10/2009 7:34 PM",
                              "10.01.2009 19:34",
                              "10-1-2009 19:34" };
      // Parse dates using each culture.
      foreach (CultureInfo culture in cultures)
      {
         DateTime dateValue;
         Console.WriteLine("Attempted conversions using {0} culture.",
                           culture.Name);
         foreach (string dateString in dateStrings)
         {
            try {
               dateValue = DateTime.Parse(dateString, culture);
               Console.WriteLine("   Converted '{0}' to {1}.",
                                 dateString, dateValue.ToString("f", culture));
            }
            catch (FormatException) {
               Console.WriteLine("   Unable to convert '{0}' for culture {1}.",
                                 dateString, culture.Name);
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output to the console:
//       Attempted conversions using en-US culture.
//          Converted '01/10/2009 7:34 PM' to Saturday, January 10, 2009 7:34 PM.
//          Converted '10.01.2009 19:34' to Thursday, October 01, 2009 7:34 PM.
//          Converted '10-1-2009 19:34' to Thursday, October 01, 2009 7:34 PM.
//
//       Attempted conversions using fr-FR culture.
//          Converted '01/10/2009 7:34 PM' to jeudi 1 octobre 2009 19:34.
//          Converted '10.01.2009 19:34' to samedi 10 janvier 2009 19:34.
//          Converted '10-1-2009 19:34' to samedi 10 janvier 2009 19:34.
//
//       Attempted conversions using de-DE culture.
//          Converted '01/10/2009 7:34 PM' to Donnerstag, 1. Oktober 2009 19:34.
//          Converted '10.01.2009 19:34' to Samstag, 10. Januar 2009 19:34.
//          Converted '10-1-2009 19:34' to Samstag, 10. Januar 2009 19:34.
open System
open System.Globalization

// Define cultures to be used to parse dates.
let cultures = 
    [ CultureInfo.CreateSpecificCulture "en-US"
      CultureInfo.CreateSpecificCulture "fr-FR"
      CultureInfo.CreateSpecificCulture "de-DE" ]

// Define string representations of a date to be parsed.
let dateStrings = 
    [ "01/10/2009 7:34 PM"
      "10.01.2009 19:34"
      "10-1-2009 19:34" ]

// Parse dates using each culture.
for culture in cultures do
    printfn $"Attempted conversions using {culture.Name} culture."
    for dateString in dateStrings do
        try
            let dateValue = DateTime.Parse(dateString, culture)
            printfn $"""   Converted '{dateString}' to {dateValue.ToString("f", culture)}."""
        with :? FormatException ->
            printfn $"   Unable to convert '{dateString}' for culture {culture.Name}." 
    printfn ""


// The example displays the following output to the console:
//       Attempted conversions using en-US culture.
//          Converted '01/10/2009 7:34 PM' to Saturday, January 10, 2009 7:34 PM.
//          Converted '10.01.2009 19:34' to Thursday, October 01, 2009 7:34 PM.
//          Converted '10-1-2009 19:34' to Thursday, October 01, 2009 7:34 PM.
//
//       Attempted conversions using fr-FR culture.
//          Converted '01/10/2009 7:34 PM' to jeudi 1 octobre 2009 19:34.
//          Converted '10.01.2009 19:34' to samedi 10 janvier 2009 19:34.
//          Converted '10-1-2009 19:34' to samedi 10 janvier 2009 19:34.
//
//       Attempted conversions using de-DE culture.
//          Converted '01/10/2009 7:34 PM' to Donnerstag, 1. Oktober 2009 19:34.
//          Converted '10.01.2009 19:34' to Samstag, 10. Januar 2009 19:34.
//          Converted '10-1-2009 19:34' to Samstag, 10. Januar 2009 19:34.
Imports System.Globalization

Module ParseDate
   Public Sub Main()
      ' Define cultures to be used to parse dates.
      Dim cultures() As CultureInfo = {CultureInfo.CreateSpecificCulture("en-US"), _
                                       CultureInfo.CreateSpecificCulture("fr-FR"), _
                                       CultureInfo.CreateSpecificCulture("de-DE")}
      ' Define string representations of a date to be parsed.
      Dim dateStrings() As String = {"01/10/2009 7:34 PM", _
                                     "10.01.2009 19:34", _
                                     "10-1-2009 19:34" }
      ' Parse dates using each culture.
      For Each culture In cultures
         Dim dateValue As Date
         Console.WriteLine("Attempted conversions using {0} culture.", culture.Name)
         For Each dateString As String In dateStrings
            Try
               dateValue = Date.Parse(dateString, culture)
               Console.WriteLine("   Converted '{0}' to {1}.", _
                                 dateString, dateValue.ToString("f", culture))
            Catch e As FormatException
               Console.WriteLine("   Unable to convert '{0}' for culture {1}.", _
                                 dateString, culture.Name)
            End Try                                                
         Next
         Console.WriteLine()
      Next                                                                                     
   End Sub
End Module
' The example displays the following output to the console:
'       Attempted conversions using en-US culture.
'          Converted '01/10/2009 7:34 PM' to Saturday, January 10, 2009 7:34 PM.
'          Converted '10.01.2009 19:34' to Thursday, October 01, 2009 7:34 PM.
'          Converted '10-1-2009 19:34' to Thursday, October 01, 2009 7:34 PM.
'       
'       Attempted conversions using fr-FR culture.
'          Converted '01/10/2009 7:34 PM' to jeudi 1 octobre 2009 19:34.
'          Converted '10.01.2009 19:34' to samedi 10 janvier 2009 19:34.
'          Converted '10-1-2009 19:34' to samedi 10 janvier 2009 19:34.
'       
'       Attempted conversions using de-DE culture.
'          Converted '01/10/2009 7:34 PM' to Donnerstag, 1. Oktober 2009 19:34.
'          Converted '10.01.2009 19:34' to Samstag, 10. Januar 2009 19:34.
'          Converted '10-1-2009 19:34' to Samstag, 10. Januar 2009 19:34.

Комментарии

Если s содержит сведения часового DateTime пояса, этот метод возвращает значение, свойство которого Kind является DateTimeKind.Local и преобразует дату и время в s местное время. В противном случае он не выполняет преобразование часового DateTime пояса и возвращает значение, свойство которого Kind имеет значение DateTimeKind.Unspecified.

Эта перегрузка пытается проанализировать s с помощью DateTimeStyles.AllowWhiteSpaces стиля.

См. также раздел

Применяется к

Parse(ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles)

Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs

Преобразует диапазон памяти, содержащий строковое представление даты и времени в его DateTime эквивалент, используя сведения о формате, зависящее от языка и региональных параметров, и стиль форматирования.

public static DateTime Parse(ReadOnlySpan<char> s, IFormatProvider? provider = default, System.Globalization.DateTimeStyles styles = System.Globalization.DateTimeStyles.None);
public static DateTime Parse(ReadOnlySpan<char> s, IFormatProvider provider = default, System.Globalization.DateTimeStyles styles = System.Globalization.DateTimeStyles.None);
static member Parse : ReadOnlySpan<char> * IFormatProvider * System.Globalization.DateTimeStyles -> DateTime
Public Shared Function Parse (s As ReadOnlySpan(Of Char), Optional provider As IFormatProvider = Nothing, Optional styles As DateTimeStyles = System.Globalization.DateTimeStyles.None) As DateTime

Параметры

s
ReadOnlySpan<Char>

Диапазон памяти, содержащий строку для синтаксического анализа. Дополнительные сведения см . в строке для анализа .

provider
IFormatProvider

Объект, предоставляющий сведения о sформате, зависящее от языка и региональных параметров. См. разделы "Анализ и культурные соглашения"

styles
DateTimeStyles

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

Возвращаемое значение

Объект, эквивалентный дате и времени, указанному sв provider и styles.

Исключения

s не содержит допустимое строковое представление даты и времени.

styles содержит недопустимое сочетание значений DateTimeStyles . Например, значения AssumeLocal и AssumeUniversal.

Применяется к

Parse(String, IFormatProvider, DateTimeStyles)

Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs
Исходный код:
DateTime.cs

Преобразует строковое представление даты и времени в его DateTime эквивалент, используя сведения о формате, зависящие от языка и региональных параметров, и стиль форматирования.

public:
 static DateTime Parse(System::String ^ s, IFormatProvider ^ provider, System::Globalization::DateTimeStyles styles);
public static DateTime Parse(string s, IFormatProvider provider, System.Globalization.DateTimeStyles styles);
public static DateTime Parse(string s, IFormatProvider? provider, System.Globalization.DateTimeStyles styles);
static member Parse : string * IFormatProvider * System.Globalization.DateTimeStyles -> DateTime
Public Shared Function Parse (s As String, provider As IFormatProvider, styles As DateTimeStyles) As DateTime

Параметры

s
String

Строка, содержащая дату и время преобразования. Дополнительные сведения см . в строке для анализа .

provider
IFormatProvider

Объект, предоставляющий сведения sо форматировании с учетом языка и региональных параметров. См. разделы "Анализ и культурные соглашения"

styles
DateTimeStyles

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

Возвращаемое значение

Объект, эквивалентный дате и времени, указанному sв provider и styles.

Исключения

s равно null.

s не содержит допустимое строковое представление даты и времени.

styles содержит недопустимое сочетание значений DateTimeStyles . Например, значения AssumeLocal и AssumeUniversal.

Примеры

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

using System;
using System.Globalization;

public class ParseDateExample
{
   public static void Main()
   {
      string dateString;
      CultureInfo culture ;
      DateTimeStyles styles;
      DateTime result;

      // Parse a date and time with no styles.
      dateString = "03/01/2009 10:00 AM";
      culture = CultureInfo.CreateSpecificCulture("en-US");
      styles = DateTimeStyles.None;
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.",
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.",
                           dateString);
      }

      // Parse the same date and time with the AssumeLocal style.
      styles = DateTimeStyles.AssumeLocal;
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.",
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
      }

      // Parse a date and time that is assumed to be local.
      // This time is five hours behind UTC. The local system's time zone is
      // eight hours behind UTC.
      dateString = "2009/03/01T10:00:00-5:00";
      styles = DateTimeStyles.AssumeLocal;
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.",
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
      }

      // Attempt to convert a string in improper ISO 8601 format.
      dateString = "03/01/2009T10:00:00-5:00";
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.",
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
      }

      // Assume a date and time string formatted for the fr-FR culture is the local
      // time and convert it to UTC.
      dateString = "2008-03-01 10:00";
      culture = CultureInfo.CreateSpecificCulture("fr-FR");
      styles = DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeLocal;
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.",
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
      }
   }
}
// The example displays the following output to the console:
//       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Unspecified.
//       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Local.
//       2009/03/01T10:00:00-5:00 converted to 3/1/2009 7:00:00 AM Local.
//       Unable to convert 03/01/2009T10:00:00-5:00 to a date and time.
//       2008-03-01 10:00 converted to 3/1/2008 6:00:00 PM Utc.
open System
open System.Globalization

[<EntryPoint>]
let main _ =
    // Parse a date and time with no styles.
    let dateString = "03/01/2009 10:00 AM"
    let culture = CultureInfo.CreateSpecificCulture "en-US"
    let styles = DateTimeStyles.None
    try
        let result = DateTime.Parse(dateString, culture, styles)
        printfn $"{dateString} converted to {result} {result.Kind}."
    with :? FormatException ->
        printfn $"Unable to convert {dateString} to a date and time."

    // Parse the same date and time with the AssumeLocal style.
    let styles = DateTimeStyles.AssumeLocal
    try
        let result = DateTime.Parse(dateString, culture, styles)
        printfn $"{dateString} converted to {result} {result.Kind}."
    with :? FormatException ->
        printfn $"Unable to convert {dateString} to a date and time."

    // Parse a date and time that is assumed to be local.
    // This time is five hours behind UTC. The local system's time zone is
    // eight hours behind UTC.
    let dateString = "2009/03/01T10:00:00-5:00"
    let styles = DateTimeStyles.AssumeLocal
    try
        let result = DateTime.Parse(dateString, culture, styles)
        printfn $"{dateString} converted to {result} {result.Kind}."
    with :? FormatException ->
        printfn $"Unable to convert {dateString} to a date and time."

    // Attempt to convert a string in improper ISO 8601 format.
    let dateString = "03/01/2009T10:00:00-5:00"
    try
        let result = DateTime.Parse(dateString, culture, styles)
        printfn $"{dateString} converted to {result} {result.Kind}."
    with :? FormatException ->
        printfn $"Unable to convert {dateString} to a date and time."

    // Assume a date and time string formatted for the fr-FR culture is the local
    // time and convert it to UTC.
    let dateString = "2008-03-01 10:00"
    let culture = CultureInfo.CreateSpecificCulture "fr-FR"
    let styles = DateTimeStyles.AdjustToUniversal ||| DateTimeStyles.AssumeLocal
    try
        let result = DateTime.Parse(dateString, culture, styles)
        printfn $"{dateString} converted to {result} {result.Kind}."
    with :? FormatException ->
        printfn $"Unable to convert {dateString} to a date and time."

    0

// The example displays the following output to the console:
//       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Unspecified.
//       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Local.
//       2009/03/01T10:00:00-5:00 converted to 3/1/2009 7:00:00 AM Local.
//       Unable to convert 03/01/2009T10:00:00-5:00 to a date and time.
//       2008-03-01 10:00 converted to 3/1/2008 6:00:00 PM Utc.
Imports System.Globalization

Module ParseDateExample
   Public Sub Main()
      Dim dateString As String  
      Dim culture As CultureInfo
      Dim styles As DateTimeStyles 
      Dim result As DateTime
      
      ' Parse a date and time with no styles.
      dateString = "03/01/2009 10:00 AM"
      culture = CultureInfo.CreateSpecificCulture("en-US")
      styles = DateTimeStyles.None
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try      
      
      ' Parse the same date and time with the AssumeLocal style.
      styles = DateTimeStyles.AssumeLocal
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try      
      
      ' Parse a date and time that is assumed to be local.
      ' This time is five hours behind UTC. The local system's time zone is 
      ' eight hours behind UTC.
      dateString = "2009/03/01T10:00:00-5:00"
      styles = DateTimeStyles.AssumeLocal
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try      
      
      ' Attempt to convert a string in improper ISO 8601 format.
      dateString = "03/01/2009T10:00:00-5:00"
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try      

      ' Assume a date and time string formatted for the fr-FR culture is the local 
      ' time and convert it to UTC.
      dateString = "2008-03-01 10:00"
      culture = CultureInfo.CreateSpecificCulture("fr-FR")
      styles = DateTimeStyles.AdjustToUniversal Or DateTimeStyles.AssumeLocal
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try      
   End Sub
End Module
'
' The example displays the following output to the console:
'       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Unspecified.
'       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Local.
'       2009/03/01T10:00:00-5:00 converted to 3/1/2009 7:00:00 AM Local.
'       Unable to convert 03/01/2009T10:00:00-5:00 to a date and time.
'       2008-03-01 10:00 converted to 3/1/2008 6:00:00 PM Utc.

Комментарии

Эта перегрузка метода преобразует дату и время и s задает Kind свойство возвращаемого DateTime значения следующим образом:

Если Преобразование часового пояса Свойство Kind
s не содержит сведений о часовом поясе. Никакой. DateTimeKind.Unspecified
s содержит сведения о часовом поясе. Время в местном часовом поясе DateTimeKind.Local
sсодержит сведения о часовом поясе DateTimeStyles.AdjustToUniversal и styles включает флаг. Координированное универсальное время (UTC) DateTimeKind.Utc
s содержит конструктор часового пояса Z или GMT и styles включает в DateTimeStyles.RoundtripKindсебя . Никакой. DateTimeKind.Utc

См. также раздел

Применяется к