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


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 года в JapaneseCalendar и JapaneseLunisolarCalendar отмечено как начало эры Рэйва. Изменение эры затрагивает все приложения, использующие эти календари. Дополнительные сведения и определение того, затронуты ли ваши приложения, см. в статье Обработка новой эры в японском календаре в .NET. Сведения о тестировании приложений в системах Windows для обеспечения их готовности к изменению эпохи см. в статье Подготовка приложения к изменению японской эры. Сведения о функциях в .NET, поддерживающих календари с несколькими эрами, а также рекомендации по работе с календарями, поддерживающими несколько эпох, см. в статье Работа с эрами.

ParseExact(String, String, IFormatProvider)

Исходный код:
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.

-или-

Компонент часов и обозначение AM/PM в s не соответствуют друг другу.

Примеры

В следующем примере демонстрируется 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 . Кроме того, требуется, чтобы <элементы Date> и <Time> в строковом представлении даты и времени отображались в порядке, заданном параметром format, и не s имели пробелов, кроме разрешенных format. Если format определяет дату без элемента time и операция синтаксического анализа завершается успешно, то результирующее DateTime значение имеет время полуночи (00:00:00). Если format определяет время без элемента date и операция синтаксического анализа завершается успешно, результирующее DateTime значение имеет дату DateTime.Now.Date.

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

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

Примечание

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

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

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

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

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

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

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

В платформа .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, используя заданный формат, указанные сведения о форматировании, связанные с языком и региональными параметрами, а также стиль. Формат строкового представления должен полностью соответствовать заданному формату. В противном случае возникает исключение.

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, или о преобразовании из параметра s в значение DateTime. Обычно указывается значение None.

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

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

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

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

Исходный код:
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, используя заданный формат, указанные сведения о форматировании, связанные с языком и региональными параметрами, а также стиль. Формат строкового представления должен полностью соответствовать заданному формату. В противном случае возникает исключение.

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, или о преобразовании из параметра s в значение DateTime. Обычно указывается значение None.

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

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

Исключения

Параметр s или format имеет значение null.

s или format является пустой строкой.

-или-

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

-или-

Компонент часов и обозначение AM/PM в s не соответствуют друг другу.

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

Примеры

В следующем примере демонстрируется ParseExact(String, String, IFormatProvider) метод. Обратите внимание, что строка "01.05.2009 8:30" не может быть успешно проанализирована, если styles параметр равен, так как в параметре не разрешены formatпробелы DateTimeStyles.None в начале. Кроме того, строка "01.05.2009 09:00" не может быть успешно проанализирована со значением format "ММ/дд/ггггч:мм", так как строка даты не предшествует номеру месяца с нулем в начале, как 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 и задает Kind свойству значение DateTimeKind.Utc. Если s указывает, что он представляет собой формат UTC или s не содержит сведения о часовом поясе, но styles включает DateTimeStyles.AssumeUniversal флаг, метод анализирует строку, не выполняет преобразование часового пояса для возвращаемого DateTime значения и задает свойству значение KindDateTimeKind.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 в местное время и задает свойству Kind значение DateTimeKind.Local.
NoCurrentDateDefault Если s содержит время без сведений о дате, то для даты возвращаемого значения устанавливается значение DateTime.MinValue.Date.
None Параметр s анализируется с использованием значений по умолчанию. Пробелы, кроме присутствующих в format , не допускаются. Если s отсутствует компонент даты, для даты возвращаемого DateTime значения устанавливается значение 01.01.0001. Если s не содержит сведений о часовом поясе, свойству Kind возвращаемого DateTime объекта присваивается значение DateTimeKind.Unspecified. Если сведения о часовом поясе присутствуют в , время преобразуется в sместное время, а свойству Kind возвращаемого DateTime объекта присваивается значение DateTimeKind.Local.
RoundtripKind Для строк, содержащих сведения о часовом поясе, пытается предотвратить преобразование в значение даты и времени со Kind свойством DateTime , равным DateTimeKind.Local. Этот флаг в первую очередь предотвращает преобразование времени в формате UTC в местное время.

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

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

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

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

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

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

В платформа .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, используя заданный массив форматов, указанные сведения о форматировании, связанные с языком и региональными параметрами, и стиль форматирования. Формат строкового представления должен полностью соответствовать по крайней мере одному из заданных форматов. В противном случае возникает исключение.

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.

-или-

Компонент часов и обозначение AM/PM в s не соответствуют друг другу.

Параметр 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 и задает Kind свойству значение DateTimeKind.Utc. Если s указывает, что он представляет собой формат UTC или s не содержит сведения о часовом поясе, но styles включает DateTimeStyles.AssumeUniversal флаг, метод анализирует строку, не выполняет преобразование часового пояса для возвращаемого DateTime значения и задает свойству значение KindDateTimeKind.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 в местное время и задает для его Kind свойства значение DateTimeKind.Local.
NoCurrentDateDefault Если s содержит время без сведений о дате, для даты возвращаемого значения устанавливается значение DateTime.MinValue.Date.
None Параметр s анализируется с использованием значений по умолчанию. Пробелы, кроме присутствующих в, format не допускаются. Если s отсутствует компонент даты, дата возвращаемого DateTime значения устанавливается на 01.01.0001. Если s не содержит сведений о часовом поясе, свойству Kind возвращаемого DateTime объекта присваивается значение DateTimeKind.Unspecified. Если сведения о часовом поясе присутствуют в , время преобразуется в sместное время, а свойству Kind возвращаемого DateTime объекта присваивается значение DateTimeKind.Local.
RoundtripKind Для строк, содержащих сведения о часовом поясе, пытается предотвратить преобразование в дату и время с заданным KindDateTimeKind.Localсвойством значением . Этот флаг в первую очередь предотвращает преобразование времени в формате UTC в местное время.

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

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

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

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

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

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

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

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

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