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


DateTime.ParseExact Метод

Определение

Преобразует указанное строковое представление даты и времени в его DateTime эквивалент. Формат строкового представления должен соответствовать указанному формату точно или создается исключение.

Перегрузки

Имя Описание
ParseExact(String, String, IFormatProvider)

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

ParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles)

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

ParseExact(ReadOnlySpan<Char>, String[], IFormatProvider, DateTimeStyles)

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

ParseExact(String, String, IFormatProvider, DateTimeStyles)

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

ParseExact(String, String[], IFormatProvider, DateTimeStyles)

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

Комментарии

Это важно

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

ParseExact(String, String, IFormatProvider)

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

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

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

Параметры

s
String

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

format
String

Описатель формата, определяющий обязательный формат s. Дополнительные сведения см. в разделе "Примечания".

provider
IFormatProvider

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

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

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

Исключения

s или format есть null.

s или format пустая строка.

–или–

s не содержит дату и время, соответствующее шаблону, указанному в format.

–или–

Компонент часа и конструктор s AM/PM не согласны.

Примеры

В следующем примере демонстрируется ParseExact метод.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string dateString, format;
      DateTime result;
      CultureInfo provider = CultureInfo.InvariantCulture;

      // Parse date-only value with invariant culture.
      dateString = "06/15/2008";
      format = "d";
      try {
         result = DateTime.ParseExact(dateString, format, provider);
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("{0} is not in the correct format.", dateString);
      }

      // Parse date-only value without leading zero in month using "d" format.
      // Should throw a FormatException because standard short date pattern of
      // invariant culture requires two-digit month.
      dateString = "6/15/2008";
      try {
         result = DateTime.ParseExact(dateString, format, provider);
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("{0} is not in the correct format.", dateString);
      }

      // Parse date and time with custom specifier.
      dateString = "Sun 15 Jun 2008 8:30 AM -06:00";
      format = "ddd dd MMM yyyy h:mm tt zzz";
      try {
         result = DateTime.ParseExact(dateString, format, provider);
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("{0} is not in the correct format.", dateString);
      }

      // Parse date and time with offset but without offset's minutes.
      // Should throw a FormatException because "zzz" specifier requires leading
      // zero in hours.
      dateString = "Sun 15 Jun 2008 8:30 AM -06";
      try {
         result = DateTime.ParseExact(dateString, format, provider);
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("{0} is not in the correct format.", dateString);
      }

      dateString = "15/06/2008 08:30";
      format = "g";
      provider = new CultureInfo("fr-FR");
      try {
         result = DateTime.ParseExact(dateString, format, provider);
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("{0} is not in the correct format.", dateString);
      }

      // Parse a date that includes seconds and milliseconds
      // by using the French (France) and invariant cultures.
      dateString = "18/08/2015 06:30:15.006542";
      format = "dd/MM/yyyy HH:mm:ss.ffffff";
      try {
         result = DateTime.ParseExact(dateString, format, provider);
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("{0} is not in the correct format.", dateString);
      }
   }
}
// The example displays the following output:
//       06/15/2008 converts to 6/15/2008 12:00:00 AM.
//       6/15/2008 is not in the correct format.
//       Sun 15 Jun 2008 8:30 AM -06:00 converts to 6/15/2008 7:30:00 AM.
//       Sun 15 Jun 2008 8:30 AM -06 is not in the correct format.
//       15/06/2008 08:30 converts to 6/15/2008 8:30:00 AM.
//       18/08/2015 06:30:15.006542 converts to 8/18/2015 6:30:15 AM.
open System
open System.Globalization

[<EntryPoint>]
let main _ =
    let provider = CultureInfo.InvariantCulture

    // Parse date-only value with invariant culture.
    let dateString = "06/15/2008"
    let format = "d"
    try
        let result = DateTime.ParseExact(dateString, format, provider)
        printfn $"{dateString} converts to {result}."
    with :? FormatException ->
        printfn $"{dateString} is not in the correct format."

    // Parse date-only value without leading zero in month using "d" format.
    // Should throw a FormatException because standard short date pattern of
    // invariant culture requires two-digit month.
    let dateString = "6/15/2008"
    try
        let result = DateTime.ParseExact(dateString, format, provider)
        printfn $"{dateString} converts to {result}."
    with :? FormatException ->
        printfn $"{dateString} is not in the correct format."

    // Parse date and time with custom specifier.
    let dateString = "Sun 15 Jun 2008 8:30 AM -06:00"
    let format = "ddd dd MMM yyyy h:mm tt zzz"
    try
        let result = DateTime.ParseExact(dateString, format, provider)
        printfn $"{dateString} converts to {result}."
    with :? FormatException ->
        printfn $"{dateString} is not in the correct format."

    // Parse date and time with offset but without offset's minutes.
    // Should throw a FormatException because "zzz" specifier requires leading
    // zero in hours.
    let dateString = "Sun 15 Jun 2008 8:30 AM -06"
    try
        let result = DateTime.ParseExact(dateString, format, provider)
        printfn $"{dateString} converts to {result}."
    with :? FormatException ->
        printfn $"{dateString} is not in the correct format."

    let dateString = "15/06/2008 08:30"
    let format = "g"
    let provider = CultureInfo "fr-FR"
    try
        let result = DateTime.ParseExact(dateString, format, provider)
        printfn $"{dateString} converts to {result}."
    with :? FormatException ->
        printfn $"{dateString} is not in the correct format."

    // Parse a date that includes seconds and milliseconds
    // by using the French (France) and invariant cultures.
    let dateString = "18/08/2015 06:30:15.006542"
    let format = "dd/MM/yyyy HH:mm:ss.ffffff"
    try
        let result = DateTime.ParseExact(dateString, format, provider)
        printfn $"{dateString} converts to {result}."
    with :? FormatException ->
        printfn $"{dateString} is not in the correct format."

    0

// The example displays the following output:
//       06/15/2008 converts to 6/15/2008 12:00:00 AM.
//       6/15/2008 is not in the correct format.
//       Sun 15 Jun 2008 8:30 AM -06:00 converts to 6/15/2008 7:30:00 AM.
//       Sun 15 Jun 2008 8:30 AM -06 is not in the correct format.
//       15/06/2008 08:30 converts to 6/15/2008 8:30:00 AM.
//       18/08/2015 06:30:15.006542 converts to 8/18/2015 6:30:15 AM.
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dateString, format As String  
      Dim result As Date
      Dim provider As CultureInfo = CultureInfo.InvariantCulture

      ' Parse date-only value with invariant culture.
      dateString = "06/15/2008"
      format = "d"
      Try
         result = Date.ParseExact(dateString, format, provider)
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
      Catch e As FormatException
         Console.WriteLine("{0} is not in the correct format.", dateString)
      End Try 

      ' Parse date-only value without leading zero in month using "d" format.
      ' Should throw a FormatException because standard short date pattern of 
      ' invariant culture requires two-digit month.
      dateString = "6/15/2008"
      Try
         result = Date.ParseExact(dateString, format, provider)
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
      Catch e As FormatException
         Console.WriteLine("{0} is not in the correct format.", dateString)
      End Try 
      
      ' Parse date and time with custom specifier.
      dateString = "Sun 15 Jun 2008 8:30 AM -06:00"
      format = "ddd dd MMM yyyy h:mm tt zzz"        
      Try
         result = Date.ParseExact(dateString, format, provider)
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
      Catch e As FormatException
         Console.WriteLine("{0} is not in the correct format.", dateString)
      End Try 
      
      ' Parse date and time with offset but without offset's minutes.
      ' Should throw a FormatException because "zzz" specifier requires leading  
      ' zero in hours.
      dateString = "Sun 15 Jun 2008 8:30 AM -06"
      Try
         result = Date.ParseExact(dateString, format, provider)
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
      Catch e As FormatException
         Console.WriteLine("{0} is not in the correct format.", dateString)
      End Try 
      
      ' Parse a date string using the French (France) culture.
      dateString = "15/06/2008 08:30"
      format = "g"
      provider = New CultureInfo("fr-FR")
      Try
         result = Date.ParseExact(dateString, format, provider)
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
      Catch e As FormatException
         Console.WriteLine("{0} is not in the correct format.", dateString)
      End Try

      ' Parse a date that includes seconds and milliseconds
      ' by using the French (France) and invariant cultures.
      dateString = "18/08/2015 06:30:15.006542"
      format = "dd/MM/yyyy HH:mm:ss.ffffff"
      Try
         result = Date.ParseExact(dateString, format, provider)
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
      Catch e As FormatException
         Console.WriteLine("{0} is not in the correct format.", dateString)
      End Try
   End Sub
End Module
' The example displays the following output:
'       06/15/2008 converts to 6/15/2008 12:00:00 AM.
'       6/15/2008 is not in the correct format.
'       Sun 15 Jun 2008 8:30 AM -06:00 converts to 6/15/2008 7:30:00 AM.
'       Sun 15 Jun 2008 8:30 AM -06 is not in the correct format.
'       15/06/2008 08:30 converts to 6/15/2008 8:30:00 AM.
'       18/08/2015 06:30:15.006542 converts to 8/18/2015 6:30:15 AM.

Комментарии

Метод DateTime.ParseExact(String, String, IFormatProvider) анализирует строковое представление даты, которое должно быть в формате, определенном параметром format . Кроме того, требуется, чтобы <> элементы строкового представления даты и><времени отображались в порядке, указанном в formatуказанном , и s не имеют пробелов, отличных от того, что разрешеноformat. Если format определяет дату без элемента времени и операция синтаксического анализа успешно, результирующее DateTime значение имеет время полуночи (00:00:00). Если format определяет время без элемента date и операция синтаксического анализа успешно, результирующее DateTime значение имеет дату DateTime.Now.Date.

Если s время в определенном часовом поясе не представляется и операция синтаксического анализа завершается успешно, Kind свойство возвращаемого DateTime значения равно DateTimeKind.Unspecified. Если s он представляет время в определенном часовом поясе и format позволяет присутствовать сведения о часовом поясе (например, если format равно описателям формата "o", "r" или "u" или "u", или содержит значения "z", "zz" или "zzz"), Kind свойство возвращаемого DateTime значения имеет значение DateTimeKind.Local.

Параметр format — это строка, содержащая либо один стандартный описатель формата, либо один или несколько настраиваемых описателей формата, определяющих обязательный формат s. Дополнительные сведения о допустимых кодах форматирования см. в разделе "Стандартные строки формата даты и времени " или "Настраиваемые строки формата даты и времени".

Замечание

Если format это пользовательский шаблон формата, который не включает разделители даты и времени (например, yyMMddHmm), используйте инвариантный язык и региональные параметры для provider параметра и самой широкой формы каждого пользовательского описателя формата. Например, если вы хотите указать часы в шаблоне формата, укажите более широкую форму , "HH", вместо более узкой формы "H".

Определенные символы даты и времени и строки (например, имена дней недели на определенном языке) s определяются provider параметром, как и точный формат s , если format является стандартной строкой описателя формата. Параметр provider может быть любым из следующих значений:

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

  • Объект DateTimeFormatInfo , определяющий формат данных даты и времени.

  • Пользовательская IFormatProvider реализация, метод которой GetFormat возвращает CultureInfo объект или DateTimeFormatInfo объект, предоставляющий сведения о форматировании.

В противном providernullCultureInfo случае используется объект, соответствующий текущему языку и региональным параметрам.

Примечания для тех, кто вызывает этот метод

В .NET Framework 4 метод создает FormatException исключение, если строка, которую необходимо проанализировать, ParseExact содержит компонент часа и конструктор AM/PM, которые не находятся в соглашении. В .NET Framework 3.5 и более ранних версиях конструктор AM/PM игнорируется.

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

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

ParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles)

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

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

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

Параметры

s
ReadOnlySpan<Char>

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

format
ReadOnlySpan<Char>

Диапазон, содержащий символы, представляющие описатель формата, определяющий обязательный формат s.

provider
IFormatProvider

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

style
DateTimeStyles

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

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

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

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

ParseExact(ReadOnlySpan<Char>, String[], IFormatProvider, DateTimeStyles)

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

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

public static DateTime ParseExact(ReadOnlySpan<char> s, string[] formats, IFormatProvider? provider, System.Globalization.DateTimeStyles style = System.Globalization.DateTimeStyles.None);
public static DateTime ParseExact(ReadOnlySpan<char> s, string[] formats, IFormatProvider provider, System.Globalization.DateTimeStyles style = System.Globalization.DateTimeStyles.None);
static member ParseExact : ReadOnlySpan<char> * string[] * IFormatProvider * System.Globalization.DateTimeStyles -> DateTime
Public Shared Function ParseExact (s As ReadOnlySpan(Of Char), formats As String(), provider As IFormatProvider, Optional style As DateTimeStyles = System.Globalization.DateTimeStyles.None) As DateTime

Параметры

s
ReadOnlySpan<Char>

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

formats
String[]

Массив допустимых форматов s.

provider
IFormatProvider

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

style
DateTimeStyles

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

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

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

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

ParseExact(String, String, IFormatProvider, DateTimeStyles)

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

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

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

Параметры

s
String

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

format
String

Описатель формата, определяющий обязательный формат s. Дополнительные сведения см. в разделе "Примечания".

provider
IFormatProvider

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

style
DateTimeStyles

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

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

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

Исключения

s или format есть null.

s или format пустая строка.

–или–

s не содержит дату и время, соответствующее шаблону, указанному в format.

–или–

Компонент часа и конструктор s AM/PM не согласны.

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

Примеры

В следующем примере демонстрируется ParseExact(String, String, IFormatProvider) метод. Обратите внимание, что строка "5/01/2009 8:30 AM" не может быть успешно проанализирована, если styles параметр равен, DateTimeStyles.None так как ведущие пробелы не допускаются format. Кроме того, строка "5/01/2009 09:00" не может быть успешно проанализирована с format "MM/dd/гг:мм", так как строка даты не предшествует номеру месяца с начальным нулем, как format требуется.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo enUS = new CultureInfo("en-US");
      string dateString;
      DateTime dateValue;

      // Parse date with no style flags.
      dateString = " 5/01/2009 8:30 AM";
      try {
         dateValue = DateTime.ParseExact(dateString, "g", enUS, DateTimeStyles.None);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }
      // Allow a leading space in the date string.
      try {
         dateValue = DateTime.ParseExact(dateString, "g", enUS, DateTimeStyles.AllowLeadingWhite);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }

      // Use custom formats with M and MM.
      dateString = "5/01/2009 09:00";
      try {
         dateValue = DateTime.ParseExact(dateString, "M/dd/yyyy hh:mm", enUS, DateTimeStyles.None);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }
      // Allow a leading space in the date string.
      try {
         dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, DateTimeStyles.None);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }

      // Parse a string with time zone information.
      dateString = "05/01/2009 01:30:42 PM -05:00";
      try {
         dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.None);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }
      // Allow a leading space in the date string.
      try {
         dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS,
                                     DateTimeStyles.AdjustToUniversal);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }

      // Parse a string representing UTC.
      dateString = "2008-06-11T16:11:20.0904778Z";
      try {
         dateValue = DateTime.ParseExact(dateString, "o", CultureInfo.InvariantCulture,
                                     DateTimeStyles.None);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }
      try {
         dateValue = DateTime.ParseExact(dateString, "o", CultureInfo.InvariantCulture,
                                     DateTimeStyles.RoundtripKind);
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      }
      catch (FormatException) {
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      }
   }
}
// The example displays the following output:
//    ' 5/01/2009 8:30 AM' is not in an acceptable format.
//    Converted ' 5/01/2009 8:30 AM' to 5/1/2009 8:30:00 AM (Unspecified).
//    Converted '5/01/2009 09:00' to 5/1/2009 9:00:00 AM (Unspecified).
//    '5/01/2009 09:00' is not in an acceptable format.
//    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 11:30:42 AM (Local).
//    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 6:30:42 PM (Utc).
//    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 9:11:20 AM (Local).
//    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 4:11:20 PM (Utc).
open System
open System.Globalization

[<EntryPoint>]
let main _ =
    let enUS = CultureInfo "en-US"

    // Parse date with no style flags.
    let dateString = " 5/01/2009 8:30 AM"
    try
        let dateValue = DateTime.ParseExact(dateString, "g", enUS, DateTimeStyles.None)
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    with :? FormatException ->
        printfn $"'{dateString}' is not in an acceptable format."
    
    // Allow a leading space in the date string.
    try
        let dateValue = DateTime.ParseExact(dateString, "g", enUS, DateTimeStyles.AllowLeadingWhite)
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    with :? FormatException ->
        printfn $"'{dateString}' is not in an acceptable format."

    // Use custom formats with M and MM.
    let dateString = "5/01/2009 09:00"
    try
        let dateValue = DateTime.ParseExact(dateString, "M/dd/yyyy hh:mm", enUS, DateTimeStyles.None)
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    with :? FormatException ->
        printfn $"'{dateString}' is not in an acceptable format."

    // Allow a leading space in the date string.
    try
        let dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, DateTimeStyles.None)
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    with :? FormatException ->
        printfn $"'{dateString}' is not in an acceptable format."

    // Parse a string with time zone information.
    let dateString = "05/01/2009 01:30:42 PM -05:00"
    try
        let dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.None)
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    with :? FormatException ->
        printfn $"'{dateString}' is not in an acceptable format."

    // Allow a leading space in the date string.
    try
        let dateValue = DateTime.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.AdjustToUniversal)
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    with :? FormatException ->
        printfn $"'{dateString}' is not in an acceptable format."

    // Parse a string representing UTC.
    let dateString = "2008-06-11T16:11:20.0904778Z"
    try
        let dateValue = DateTime.ParseExact(dateString, "o", CultureInfo.InvariantCulture, DateTimeStyles.None)
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    with :? FormatException ->
        printfn $"'{dateString}' is not in an acceptable format."

    try
        let dateValue = DateTime.ParseExact(dateString, "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind)
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    with :? FormatException ->
        printfn $"'{dateString}' is not in an acceptable format."


// The example displays the following output:
//    ' 5/01/2009 8:30 AM' is not in an acceptable format.
//    Converted ' 5/01/2009 8:30 AM' to 5/1/2009 8:30:00 AM (Unspecified).
//    Converted '5/01/2009 09:00' to 5/1/2009 9:00:00 AM (Unspecified).
//    '5/01/2009 09:00' is not in an acceptable format.
//    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 11:30:42 AM (Local).
//    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 6:30:42 PM (Utc).
//    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 9:11:20 AM (Local).
//    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 4:11:20 PM (Utc).
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim enUS As New CultureInfo("en-US") 
      Dim dateString As String
      Dim dateValue As Date
      
      ' Parse date with no style flags.
      dateString = " 5/01/2009 8:30 AM"
      Try
         dateValue = Date.ParseExact(dateString, "g", enUS, DateTimeStyles.None)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
      ' Allow a leading space in the date string.
      Try
         dateValue = Date.ParseExact(dateString, "g", enUS, DateTimeStyles.AllowLeadingWhite)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
      
      ' Use custom formats with M and MM.
      dateString = "5/01/2009 09:00"
      Try
         dateValue = Date.ParseExact(dateString, "M/dd/yyyy hh:mm", enUS, DateTimeStyles.None)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
      ' Allow a leading space in the date string.
      Try
         dateValue = Date.ParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, DateTimeStyles.None)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try

      ' Parse a string with time zone information.
      dateString = "05/01/2009 01:30:42 PM -05:00" 
      Try
         dateValue = Date.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.None)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
      ' Allow a leading space in the date string.
      Try
         dateValue = Date.ParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, _
                                     DateTimeStyles.AdjustToUniversal)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
           
      ' Parse a string representing UTC.
      dateString = "2008-06-11T16:11:20.0904778Z"
      Try
         dateValue = Date.ParseExact(dateString, "o", CultureInfo.InvariantCulture, _
                                     DateTimeStyles.None)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
      Try
         dateValue = Date.ParseExact(dateString, "o", CultureInfo.InvariantCulture, _
                                     DateTimeStyles.RoundtripKind)
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Catch e As FormatException
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End Try
   End Sub
End Module
' The example displays the following output:
'    ' 5/01/2009 8:30 AM' is not in an acceptable format.
'    Converted ' 5/01/2009 8:30 AM' to 5/1/2009 8:30:00 AM (Unspecified).
'    Converted '5/01/2009 09:00' to 5/1/2009 9:00:00 AM (Unspecified).
'    '5/01/2009 09:00' is not in an acceptable format.
'    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 11:30:42 AM (Local).
'    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 6:30:42 PM (Utc).
'    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 9:11:20 AM (Local).
'    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 4:11:20 PM (Utc).

Комментарии

Метод DateTime.ParseExact(String, String, IFormatProvider, DateTimeStyles) анализирует строковое представление даты, которое должно быть в формате, определенном format параметром. Кроме того, требуется, чтобы элементы даты и времени отображались в s указанном порядке format. Если s шаблон параметра не соответствует, при каких-либо вариациях format , определенных style параметром, метод вызывает исключение FormatException. Напротив, метод анализирует строковое представление даты в любом из форматов, DateTime.Parse(String, IFormatProvider, DateTimeStyles) распознаваемых объектом поставщика DateTimeFormatInfo формата. Метод DateTime.Parse(String, IFormatProvider, DateTimeStyles) также позволяет элементам даты и времени s отображаться в любом порядке.

s Если параметр содержит только время и нет даты, текущая дата используется, если style параметр не содержит DateTimeStyles.NoCurrentDateDefault флаг, в этом случае используется дата по умолчанию (DateTime.Date.MinValue). s Если параметр содержит только дату и нет времени, используется полночь (00:00:00). Параметр style также определяет, может ли s параметр содержать начальные, внутренние или конечные символы пробелов.

Если s нет сведений часового пояса, Kind свойство возвращаемого DateTime объекта равно DateTimeKind.Unspecified. Это поведение можно изменить с помощью флага DateTimeStyles.AssumeLocal , который возвращает DateTime значение, свойство которого Kind является DateTimeKind.Local, или с помощью DateTimeStyles.AssumeUniversal флагов DateTimeStyles.AdjustToUniversal , которое возвращает DateTime значение, свойство которого Kind является DateTimeKind.Utc. Если s содержит сведения часового пояса, время преобразуется в локальное время, при необходимости и Kind свойство возвращаемого DateTime объекта задается в значение DateTimeKind.Local. Это поведение можно изменить с помощью флага DateTimeStyles.RoundtripKind , чтобы не преобразовать в локальное время координированное универсальное время (UTC) и задать Kind для свойства значение DateTimeKind.Utc.

Параметр format определяет обязательный шаблон s параметра. Он может состоять из одного или нескольких настраиваемых описателей формата из таблицы строк пользовательского формата даты и времени или одного стандартного описателя формата, который определяет предопределенный шаблон из таблицы строк стандартного формата даты и времени .

Если вы не используете разделители даты или времени в пользовательском шаблоне формата, используйте инвариантный язык и региональные параметры для provider параметра и самой широкой формы каждого пользовательского описателя формата. Например, если вы хотите указать часы в шаблоне, укажите более широкую форму , "HH", вместо более узкой формы "H".

Замечание

Вместо того, чтобы обеспечить s соответствие одному формату для успешной операции синтаксического анализа, можно вызвать DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles) метод и указать несколько разрешенных форматов. Это делает операцию синтаксического анализа более вероятной для успешной.

Этот styles параметр включает в себя один или несколько элементов DateTimeStyles перечисления, определяющих, может ли отображаться пробел и где пробелы не определены format , s а также управлять точным поведением операции синтаксического анализа. В следующей таблице описывается, как каждый элемент DateTimeStyles перечисления влияет на операцию ParseExact(String, String, IFormatProvider, 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 Указывает, что пробелы, которые не определены, могут отображаться между отдельным элементом format даты или времени.
AllowLeadingWhite Указывает, что пробелы, не определенные format в начале s.
AllowTrailingWhite Указывает, что пробелы, которые не определены, format могут отображаться в конце s.
AllowWhiteSpaces Указывает, что s может содержать начальные, внутренние и конечные пробелы, не определенные format.
AssumeLocal Указывает, что если s нет сведений часового пояса, предполагается, что он представляет локальное время. Если DateTimeStyles.AdjustToUniversal флаг отсутствует, Kind для свойства возвращаемого DateTime значения задано значение DateTimeKind.Local.
AssumeUniversal Указывает, что если s нет сведений о часовом поясе, предполагается, что он представляет UTC. Если DateTimeStyles.AdjustToUniversal флаг отсутствует, метод преобразует возвращаемое DateTime значение из UTC в местное время и задает для свойства значение KindDateTimeKind.Local.
NoCurrentDateDefault Если s значение содержит время без сведений о дате, то для даты возвращаемого значения задано DateTime.MinValue.Dateзначение .
None Параметр s анализируется с помощью значений по умолчанию. Пробелы, отличные от этого, format не допускаются. Если s компонент даты отсутствует, дата возвращаемого DateTime значения имеет значение 1/1/0001. Если s нет сведений часового пояса, Kind для свойства возвращаемого DateTime объекта задано значение DateTimeKind.Unspecified. Если данные часового пояса присутствуют s, время преобразуется в локальное время, а Kind свойство возвращаемого DateTime объекта имеет значение DateTimeKind.Local.
RoundtripKind Для строк, содержащих сведения о часовом поясе, пытается предотвратить преобразование в DateTime дату и время значения с заданным DateTimeKind.LocalсвойствомKind. Этот флаг в основном предотвращает преобразование времени UTC в локальное время.

Определенные символы даты и времени и строки (например, имена дней недели на определенном языке) s определяются provider параметром, как и точный формат s , если format является строкой описателя стандартного формата. Параметр provider может быть любым из следующих значений:

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

  • Объект DateTimeFormatInfo , определяющий формат данных даты и времени.

  • Пользовательская IFormatProvider реализация, метод которой GetFormat возвращает CultureInfo объект или DateTimeFormatInfo объект, предоставляющий сведения о форматировании.

В противном providernullCultureInfo случае используется объект, соответствующий текущему языку и региональным параметрам.

Примечания для тех, кто вызывает этот метод

В .NET Framework 4 метод создает FormatException исключение, если строка, которую необходимо проанализировать, ParseExact содержит компонент часа и конструктор AM/PM, которые не находятся в соглашении. В .NET Framework 3.5 и более ранних версиях конструктор AM/PM игнорируется.

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

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

ParseExact(String, String[], IFormatProvider, DateTimeStyles)

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

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

public:
 static DateTime ParseExact(System::String ^ s, cli::array <System::String ^> ^ formats, IFormatProvider ^ provider, System::Globalization::DateTimeStyles style);
public static DateTime ParseExact(string s, string[] formats, IFormatProvider provider, System.Globalization.DateTimeStyles style);
public static DateTime ParseExact(string s, string[] formats, IFormatProvider? provider, System.Globalization.DateTimeStyles style);
static member ParseExact : string * string[] * IFormatProvider * System.Globalization.DateTimeStyles -> DateTime
Public Shared Function ParseExact (s As String, formats As String(), provider As IFormatProvider, style As DateTimeStyles) As DateTime

Параметры

s
String

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

formats
String[]

Массив допустимых форматов s. Дополнительные сведения см. в разделе "Примечания".

provider
IFormatProvider

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

style
DateTimeStyles

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

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

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

Исключения

s или formats есть null.

s — пустая строка.

–или–

элемент formats является пустой строкой.

–или–

s не содержит дату и время, соответствующее любому элементу formats.

–или–

Компонент часа и конструктор s AM/PM не согласны.

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

Примеры

В следующем примере метод используется DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles) для обеспечения успешного анализа строки в нескольких возможных форматах.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] formats= {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt",
                         "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss",
                         "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt",
                         "M/d/yyyy h:mm", "M/d/yyyy h:mm",
                         "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm",
                         "MM/d/yyyy HH:mm:ss.ffffff" };
      string[] dateStrings = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM",
                              "5/1/2009 6:32:00", "05/01/2009 06:32",
                              "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00",
                              "08/28/2015 16:17:39.125", "08/28/2015 16:17:39.125000" };
      DateTime dateValue;

      foreach (string dateString in dateStrings)
      {
         try {
            dateValue = DateTime.ParseExact(dateString, formats,
                                            new CultureInfo("en-US"),
                                            DateTimeStyles.None);
            Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
         }
         catch (FormatException) {
            Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
         }
      }
   }
}
// The example displays the following output:
//       Converted '5/1/2009 6:32 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 6:32:05 PM' to 5/1/2009 6:32:05 PM.
//       Converted '5/1/2009 6:32:00' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32:00 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 06:32:00' to 5/1/2009 6:32:00 AM.
//       Unable to convert '08/28/2015 16:17:39.125' to a date.
//       Converted '08/28/2015 16:17:39.125000' to 8/28/2015 4:17:39 PM.
open System
open System.Globalization

let formats = 
    [| "M/d/yyyy h:mm:ss tt"; "M/d/yyyy h:mm tt"
       "MM/dd/yyyy hh:mm:ss"; "M/d/yyyy h:mm:ss"
       "M/d/yyyy hh:mm tt"; "M/d/yyyy hh tt"
       "M/d/yyyy h:mm"; "M/d/yyyy h:mm"
       "MM/dd/yyyy hh:mm"; "M/dd/yyyy hh:mm"
       "MM/d/yyyy HH:mm:ss.ffffff" |]

let dateStrings = 
    [ "5/1/2009 6:32 PM"; "05/01/2009 6:32:05 PM"
      "5/1/2009 6:32:00"; "05/01/2009 06:32"
      "05/01/2009 06:32:00 PM"; "05/01/2009 06:32:00"
      "08/28/2015 16:17:39.125"; "08/28/2015 16:17:39.125000" ]

for dateString in dateStrings do
    try
        let dateValue = DateTime.ParseExact(dateString, formats, CultureInfo "en-US", DateTimeStyles.None)
        printfn $"Converted '{dateString}' to {dateValue}."
    with :? FormatException ->
        printfn $"Unable to convert '{dateString}' to a date."

// The example displays the following output:
//       Converted '5/1/2009 6:32 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 6:32:05 PM' to 5/1/2009 6:32:05 PM.
//       Converted '5/1/2009 6:32:00' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32:00 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 06:32:00' to 5/1/2009 6:32:00 AM.
//       Unable to convert '08/28/2015 16:17:39.125' to a date.
//       Converted '08/28/2015 16:17:39.125000' to 8/28/2015 4:17:39 PM.
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim formats() As String = {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", _
                                 "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", _
                                 "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", _
                                 "M/d/yyyy h:mm", "M/d/yyyy h:mm", _
                                 "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm",
                                 "MM/d/yyyy HH:mm:ss.ffffff" }
      Dim dateStrings() As String = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM", _
                                     "5/1/2009 6:32:00", "05/01/2009 06:32", _
                                     "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00",
                                     "08/28/2015 16:17:39.125", "08/28/2015 16:17:39.125000" }

      Dim dateValue As DateTime
      
      For Each dateString As String In dateStrings
         Try
            dateValue = DateTime.ParseExact(dateString, formats, _
                                            New CultureInfo("en-US"), _
                                            DateTimeStyles.None)
            Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue)
         Catch e As FormatException
            Console.WriteLine("Unable to convert '{0}' to a date.", dateString)
         End Try                                               
      Next
   End Sub
End Module
' The example displays the following output:
'       Converted '5/1/2009 6:32 PM' to 5/1/2009 6:32:00 PM.
'       Converted '05/01/2009 6:32:05 PM' to 5/1/2009 6:32:05 PM.
'       Converted '5/1/2009 6:32:00' to 5/1/2009 6:32:00 AM.
'       Converted '05/01/2009 06:32' to 5/1/2009 6:32:00 AM.
'       Converted '05/01/2009 06:32:00 PM' to 5/1/2009 6:32:00 PM.
'       Converted '05/01/2009 06:32:00' to 5/1/2009 6:32:00 AM.
'       Unable to convert '08/28/2015 16:17:39.125' to a date.
'       Converted '08/28/2015 16:17:39.125000' to 8/28/2015 4:17:39 PM.

Комментарии

Метод DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles) анализирует строковое представление даты, которая соответствует любому из шаблонов, назначенных параметру formats . Если строка s не соответствует ни одному из этих шаблонов с любым из вариантов, определенных styles параметром, метод вызывает FormatExceptionисключение. Помимо сравнения s с несколькими шаблонами форматирования, а не с одним шаблоном форматирования, эта перегрузка ведет себя одинаково с методом DateTime.ParseExact(String, String, IFormatProvider, DateTimeStyles) .

Параметр s содержит дату и время синтаксического анализа. s Если параметр содержит только время и нет даты, текущая дата используется, если style параметр не содержит DateTimeStyles.NoCurrentDateDefault флаг, в этом случае используется дата по умолчанию (DateTime.Date.MinValue). s Если параметр содержит только дату и нет времени, используется полночь (00:00:00). Параметр style также определяет, может ли s параметр содержать начальные, внутренние или конечные символы пробелов, отличные от тех, которые разрешены одной из строк формата в formats.

Если s нет сведений часового пояса, Kind свойство возвращаемого DateTime объекта равно DateTimeKind.Unspecified. Это поведение можно изменить с помощью флага DateTimeStyles.AssumeLocal , который возвращает DateTime значение, свойство которого Kind является DateTimeKind.Local, или с помощью DateTimeStyles.AssumeUniversal флагов DateTimeStyles.AdjustToUniversal , которое возвращает DateTime значение, свойство которого Kind является DateTimeKind.Utc. Если s содержит сведения часового пояса, время преобразуется в локальное время, при необходимости и Kind свойство возвращаемого DateTime объекта задается в значение DateTimeKind.Local. Это поведение можно изменить с помощью флага DateTimeStyles.RoundtripKind , чтобы не преобразовать в локальное время координированное универсальное время (UTC) и задать Kind для свойства значение DateTimeKind.Utc.

Параметр formats содержит массив шаблонов, один из которых s должен соответствовать точно, если операция синтаксического анализа будет выполнена успешно. Шаблоны в formats параметре состоят из одной или нескольких настраиваемых описателей формата из таблицы строк настраиваемого формата даты и времени или одного стандартного описателя формата, который определяет предопределенный шаблон из таблицы строк стандартного формата даты и времени .

Если вы не используете разделители даты или времени в пользовательском шаблоне формата, используйте инвариантный язык и региональные параметры для provider параметра и самой широкой формы каждого пользовательского описателя формата. Например, если вы хотите указать часы в шаблоне, укажите более широкую форму , "HH", вместо более узкой формы "H".

Этот styles параметр включает в себя один или несколько элементов DateTimeStyles перечисления, определяющих, может ли отображаться пробел и где пробелы не определены format , s а также управлять точным поведением операции синтаксического анализа. В следующей таблице описывается, как каждый элемент DateTimeStyles перечисления влияет на операцию ParseExact(String, String, IFormatProvider, 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 Указывает, что пробелы, которые не определены, могут отображаться между отдельным элементом format даты или времени.
AllowLeadingWhite Указывает, что пробелы, не определенные format в начале s.
AllowTrailingWhite Указывает, что пробелы, которые не определены, format могут отображаться в конце s.
AllowWhiteSpaces Указывает, что s может содержать начальные, внутренние и конечные пробелы, не определенные format.
AssumeLocal Указывает, что если s нет сведений часового пояса, предполагается, что он представляет локальное время. Если DateTimeStyles.AdjustToUniversal флаг отсутствует, Kind для свойства возвращаемого DateTime значения задано значение DateTimeKind.Local.
AssumeUniversal Указывает, что если s нет сведений о часовом поясе, предполагается, что он представляет UTC. Если DateTimeStyles.AdjustToUniversal флаг отсутствует, метод преобразует возвращаемое DateTime значение из UTC в местное время и задает для свойства значение KindDateTimeKind.Local.
NoCurrentDateDefault Если s значение содержит время без сведений о дате, то для даты возвращаемого значения задано DateTime.MinValue.Dateзначение .
None Параметр s анализируется с помощью значений по умолчанию. Пробелы, отличные от этого, format не допускаются. Если s компонент даты отсутствует, дата возвращаемого DateTime значения имеет значение 1/1/0001. Если s нет сведений часового пояса, Kind для свойства возвращаемого DateTime объекта задано значение DateTimeKind.Unspecified. Если данные часового пояса присутствуют s, время преобразуется в локальное время, а Kind свойство возвращаемого DateTime объекта имеет значение DateTimeKind.Local.
RoundtripKind Для строк, содержащих сведения часового пояса, пытается предотвратить преобразование в дату и время со значением свойства KindDateTimeKind.Local. Этот флаг в основном предотвращает преобразование времени UTC в локальное время.

Определенные символы даты и времени и строки (например, имена дней недели на определенном языке) s определяются provider параметром, как и точный формат s , если format является строкой описателя стандартного формата. Параметр provider может быть любым из следующих значений:

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

  • Объект DateTimeFormatInfo , определяющий формат данных даты и времени.

  • Пользовательская IFormatProvider реализация, метод которой GetFormat возвращает CultureInfo объект или DateTimeFormatInfo объект, предоставляющий сведения о форматировании.

В противном providernullCultureInfo случае используется объект, соответствующий текущему языку и региональным параметрам.

Примечания для тех, кто вызывает этот метод

В .NET Framework 4 метод создает FormatException исключение, если строка, которую необходимо проанализировать, ParseExact содержит компонент часа и конструктор AM/PM, которые не находятся в соглашении. В .NET Framework 3.5 и более ранних версиях конструктор AM/PM игнорируется.

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

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