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


DateTime.TryParseExact Метод

Определение

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

Перегрузки

Имя Описание
TryParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles, DateTime)

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

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

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

TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime)

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

TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime)

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

Комментарии

Важный

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

TryParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles, DateTime)

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

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

public:
 static bool TryParseExact(ReadOnlySpan<char> s, ReadOnlySpan<char> format, IFormatProvider ^ provider, System::Globalization::DateTimeStyles style, [Runtime::InteropServices::Out] DateTime % result);
public static bool TryParseExact(ReadOnlySpan<char> s, ReadOnlySpan<char> format, IFormatProvider? provider, System.Globalization.DateTimeStyles style, out DateTime result);
public static bool TryParseExact(ReadOnlySpan<char> s, ReadOnlySpan<char> format, IFormatProvider provider, System.Globalization.DateTimeStyles style, out DateTime result);
static member TryParseExact : ReadOnlySpan<char> * ReadOnlySpan<char> * IFormatProvider * System.Globalization.DateTimeStyles * DateTime -> bool
Public Shared Function TryParseExact (s As ReadOnlySpan(Of Char), format As ReadOnlySpan(Of Char), provider As IFormatProvider, style As DateTimeStyles, ByRef result As DateTime) As Boolean

Параметры

s
ReadOnlySpan<Char>

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

format
ReadOnlySpan<Char>

Обязательный формат s.

provider
IFormatProvider

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

style
DateTimeStyles

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

result
DateTime

Когда этот метод возвращается, содержит DateTime значение, эквивалентное дате и времени, содержаемой в s, если преобразование выполнено успешно, или DateTime.MinValue , если преобразование завершилось сбоем. Преобразование завершается ошибкой, если параметр sformat является nullпустой строкой или не содержит дату и время, соответствующее шаблону, указанному в format. Этот параметр передается неинициализирован.

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

true Значение , если s оно было успешно преобразовано; в противном случае false.

Исключения

Длина format составляет 1, и это не один из символов описателя формата, определенных для DateTimeFormatInfo.

-или-

format не содержит допустимый шаблон пользовательского формата.

style недопустимое DateTimeStyles значение.

-или-

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

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

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

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

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

public:
 static bool TryParseExact(ReadOnlySpan<char> s, cli::array <System::String ^> ^ formats, IFormatProvider ^ provider, System::Globalization::DateTimeStyles style, [Runtime::InteropServices::Out] DateTime % result);
public static bool TryParseExact(ReadOnlySpan<char> s, string?[]? formats, IFormatProvider? provider, System.Globalization.DateTimeStyles style, out DateTime result);
public static bool TryParseExact(ReadOnlySpan<char> s, string[] formats, IFormatProvider provider, System.Globalization.DateTimeStyles style, out DateTime result);
static member TryParseExact : ReadOnlySpan<char> * string[] * IFormatProvider * System.Globalization.DateTimeStyles * DateTime -> bool
Public Shared Function TryParseExact (s As ReadOnlySpan(Of Char), formats As String(), provider As IFormatProvider, style As DateTimeStyles, ByRef result As DateTime) As Boolean

Параметры

s
ReadOnlySpan<Char>

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

formats
String[]

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

provider
IFormatProvider

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

style
DateTimeStyles

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

result
DateTime

Когда этот метод возвращается, содержит DateTime значение, эквивалентное дате и времени, содержаемой в s, если преобразование выполнено успешно, или DateTime.MinValue , если преобразование завершилось сбоем. Преобразование завершается ошибкой, если s параметр имеет nullзначение , является Emptyили не содержит допустимое строковое представление даты и времени. Этот параметр передается неинициализирован.

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

true Значение , если s оно было успешно преобразовано; в противном случае false.

Исключения

Длина элемента formats в 1, и это не один из символов описателя формата, определенных для DateTimeFormatInfo.

style недопустимое DateTimeStyles значение.

-или-

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

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

TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime)

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

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

public:
 static bool TryParseExact(System::String ^ s, System::String ^ format, IFormatProvider ^ provider, System::Globalization::DateTimeStyles style, [Runtime::InteropServices::Out] DateTime % result);
public static bool TryParseExact(string s, string format, IFormatProvider provider, System.Globalization.DateTimeStyles style, out DateTime result);
public static bool TryParseExact(string? s, string? format, IFormatProvider? provider, System.Globalization.DateTimeStyles style, out DateTime result);
static member TryParseExact : string * string * IFormatProvider * System.Globalization.DateTimeStyles * DateTime -> bool
Public Shared Function TryParseExact (s As String, format As String, provider As IFormatProvider, style As DateTimeStyles, ByRef result As DateTime) As Boolean

Параметры

s
String

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

format
String

Обязательный формат s.

provider
IFormatProvider

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

style
DateTimeStyles

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

result
DateTime

Когда этот метод возвращается, содержит DateTime значение, эквивалентное дате и времени, содержаемой в s, если преобразование выполнено успешно, или DateTime.MinValue , если преобразование завершилось сбоем. Преобразование завершается ошибкой, если параметр sformat является nullпустой строкой или не содержит дату и время, соответствующее шаблону, указанному в format. Этот параметр передается неинициализирован.

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

true Значение , если s оно было успешно преобразовано; в противном случае false.

Исключения

Длина format составляет 1, и это не один из символов описателя формата, определенных для DateTimeFormatInfo.

-или-

format не содержит допустимый шаблон пользовательского формата.

style недопустимое DateTimeStyles значение.

-или-

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

Примеры

В следующем примере демонстрируется DateTime.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) метод. Обратите внимание, что строка "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";
      if (DateTime.TryParseExact(dateString, "g", enUS,
                                 DateTimeStyles.None, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

      // Allow a leading space in the date string.
      if (DateTime.TryParseExact(dateString, "g", enUS,
                                 DateTimeStyles.AllowLeadingWhite, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

      // Use custom formats with M and MM.
      dateString = "5/01/2009 09:00";
      if (DateTime.TryParseExact(dateString, "M/dd/yyyy hh:mm", enUS,
                                 DateTimeStyles.None, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

      // Allow a leading space in the date string.
      if (DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm", enUS,
                              DateTimeStyles.None, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      else
         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";
      if (DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS,
                              DateTimeStyles.None, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

      // Allow a leading space in the date string.
      if (DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS,
                              DateTimeStyles.AdjustToUniversal, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

      // Parse a string representing UTC.
      dateString = "2008-06-11T16:11:20.0904778Z";
      if (DateTime.TryParseExact(dateString, "o", CultureInfo.InvariantCulture,
                                     DateTimeStyles.None, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

      if (DateTime.TryParseExact(dateString, "o", CultureInfo.InvariantCulture,
                                 DateTimeStyles.RoundtripKind, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue,
                           dateValue.Kind);
      else
         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"
    match DateTime.TryParseExact(dateString, "g", enUS, DateTimeStyles.None) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."              
    | _ ->
        printfn $"'{dateString}' is not in an acceptable format."

    // Allow a leading space in the date string.
    match DateTime.TryParseExact(dateString, "g", enUS, DateTimeStyles.AllowLeadingWhite) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    | _ ->
        printfn $"'{dateString}' is not in an acceptable format."

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

    // Allow a leading space in the date string.
    match DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, DateTimeStyles.None) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    | _ ->
        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"
    match DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.None) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    | _ ->
        printfn $"'{dateString}' is not in an acceptable format."

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

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

    match DateTime.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    | _ ->
        printfn $"'{dateString}' is not in an acceptable format."

    0

    // 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

Public 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"
      If Date.TryParseExact(dateString, "g", enUS, _
                            DateTimeStyles.None, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
      ' Allow a leading space in the date string.
      If Date.TryParseExact(dateString, "g", enUS, _
                            DateTimeStyles.AllowLeadingWhite, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
      
      ' Use custom formats with M and MM.
      dateString = "5/01/2009 09:00"
      If Date.TryParseExact(dateString, "M/dd/yyyy hh:mm", enUS, _
                            DateTimeStyles.None, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
      ' Allow a leading space in the date string.
      If Date.TryParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, _
                            DateTimeStyles.None, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If

      ' Parse a string with time zone information.
      dateString = "05/01/2009 01:30:42 PM -05:00" 
      If Date.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, _
                            DateTimeStyles.None, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
      ' Allow a leading space in the date string.
      If Date.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, _
                            DateTimeStyles.AdjustToUniversal, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
           
      ' Parse a string representing UTC.
      dateString = "2008-06-11T16:11:20.0904778Z"
      If Date.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, _
                                     DateTimeStyles.None, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
      
      If Date.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, _
                            DateTimeStyles.RoundtripKind, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
   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.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) анализирует строковое представление даты, которое должно быть в формате, определенном параметром format . Он аналогичен методу DateTime.ParseExact(String, String, IFormatProvider, DateTimeStyles) , за исключением того, что TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) метод не создает исключение, если преобразование завершается ошибкой.

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

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

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

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

Заметка

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

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

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

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

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

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

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

Элемент 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 в локальное время.

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

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

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

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

TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime)

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

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

public:
 static bool TryParseExact(System::String ^ s, cli::array <System::String ^> ^ formats, IFormatProvider ^ provider, System::Globalization::DateTimeStyles style, [Runtime::InteropServices::Out] DateTime % result);
public static bool TryParseExact(string s, string[] formats, IFormatProvider provider, System.Globalization.DateTimeStyles style, out DateTime result);
public static bool TryParseExact(string? s, string?[]? formats, IFormatProvider? provider, System.Globalization.DateTimeStyles style, out DateTime result);
static member TryParseExact : string * string[] * IFormatProvider * System.Globalization.DateTimeStyles * DateTime -> bool
Public Shared Function TryParseExact (s As String, formats As String(), provider As IFormatProvider, style As DateTimeStyles, ByRef result As DateTime) As Boolean

Параметры

s
String

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

formats
String[]

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

provider
IFormatProvider

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

style
DateTimeStyles

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

result
DateTime

Когда этот метод возвращается, содержит DateTime значение, эквивалентное дате и времени, содержаемой в s, если преобразование выполнено успешно, или DateTime.MinValue , если преобразование завершилось сбоем. Преобразование завершается ошибкой, если или естьnull, или элемент formats является пустой строкой, или формат s не совсем так, как указано по крайней мере одним из шаблонов формата вformats. sformatss Этот параметр передается неинициализирован.

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

Значение />, если параметр был преобразован успешно; в противном случае .

Исключения

Длина элемента formats в 1, и это не один из символов описателя формата, определенных для DateTimeFormatInfo.

style недопустимое DateTimeStyles значение.

-или-

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

Примеры

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

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"};
      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"};
      DateTime dateValue;

      foreach (string dateString in dateStrings)
      {
         if (DateTime.TryParseExact(dateString, formats,
                                    new CultureInfo("en-US"),
                                    DateTimeStyles.None,
                                    out dateValue))
            Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
         else
            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.
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" |]

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" ]

for dateString in dateStrings do
    match DateTime.TryParseExact(dateString, formats, CultureInfo "en-US", DateTimeStyles.None) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue}."
    | _ ->
        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.
Imports System.Globalization

Public 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"}
      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"} 

      Dim dateValue As DateTime
      
      For Each dateString As String In dateStrings
         If Date.TryParseExact(dateString, formats, _
                               New CultureInfo("en-US"), _
                               DateTimeStyles.None, _
                               dateValue) Then
            Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue)
         Else
            Console.WriteLine("Unable to convert '{0}' to a date.", dateString)
         End If                                               
      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.

Комментарии

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

Параметр 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. Если данные часового пояса содержатся, время преобразуется в локальное время, при необходимости и Kind свойство возвращаемого DateTime объекта задается в значение DateTimeKind.Local. Это поведение можно изменить с помощью флага DateTimeStyles.RoundtripKind , чтобы не преобразовать в локальное время координированное универсальное время (UTC) и задать Kind для свойства значение DateTimeKind.Utc.

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

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

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

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

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

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

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

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

Элемент 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 в локальное время.

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

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

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

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