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


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

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, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр s или formatnull, является пустой строкой или не содержит дату и время, соответствующее шаблону, указанному в format. Этот параметр передается неинициализирован.

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

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

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

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

Исходный код:
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, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр snull, Emptyили не содержит допустимое строковое представление даты и времени. Этот параметр передается неинициализирован.

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

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

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

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

Исходный код:
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, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр s или formatnull, является пустой строкой или не содержит дату и время, соответствующее шаблону, указанному в format. Этот параметр передается неинициализирован.

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

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

Исключения

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

-или-

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

Примеры

В следующем примере показан метод DateTime.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime). Обратите внимание, что строка "5.01.2009 8:30" не может быть успешно проанализирована, если параметр 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, если styles включает флаг DateTimeStyles.NoCurrentDateDefault. Параметр style определяет, может ли параметр s содержать начальные, внутренние или конечные символы пробелов.

Если s не содержит сведений часового пояса, свойство Kind возвращаемого объекта DateTimeDateTimeKind.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. Шаблон в параметре состоит из одного или нескольких настраиваемых описателей формата из таблицы настраиваемых строк формата даты и времени или одного стандартного описателя формата, который определяет предопределенный шаблон из таблицы стандартных строк даты и времени.

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

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

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

Элемент DateTimeStyles Описание
AdjustToUniversal Синтаксический анализ s и при необходимости преобразует его в формате UTC. Если s включает смещение часового пояса или если s не содержит сведений часового пояса, но styles включает флаг DateTimeStyles.AssumeLocal, метод анализирует строку, вызывает ToUniversalTime для преобразования возвращаемого значения DateTime в utc и задает для свойства Kind значение DateTimeKind.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 в локальное время и задает для свойства Kind значение DateTimeKind.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 со свойством Kind, равным DateTimeKind.Local. Этот флаг в основном предотвращает преобразование времени 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 эквивалент с помощью указанного массива форматов, сведений о формате и региональных параметрах и стилях. Формат строкового представления должен точно соответствовать одному из указанных форматов. Метод возвращает значение, указывающее, выполнено ли преобразование успешно.

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, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если s или formatsnull, s или элемент formats является пустой строкой, или формат s не точно так же, как указано по крайней мере одним из шаблонов формата в formats. Этот параметр передается неинициализирован.

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

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

Исключения

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 возвращаемого объекта DateTimeDateTimeKind.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 должен соответствовать точно, если операция синтаксического анализа будет выполнена успешно. Шаблоны в параметре состоят из одного или нескольких настраиваемых описателей формата из таблицы настраиваемых строк формата даты и времени или одного стандартного описателя формата, который определяет предопределенный шаблон из таблицы строк стандартного формата даты и времени.

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

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

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

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

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

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

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

Элемент DateTimeStyles Описание
AdjustToUniversal Синтаксический анализ s и при необходимости преобразует его в формате UTC. Если s включает смещение часового пояса или если s не содержит сведений часового пояса, но styles включает флаг DateTimeStyles.AssumeLocal, метод анализирует строку, вызывает ToUniversalTime для преобразования возвращаемого значения DateTime в utc и задает для свойства Kind значение DateTimeKind.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 в локальное время и задает для свойства Kind значение DateTimeKind.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 со свойством Kind, равным DateTimeKind.Local. Этот флаг в основном предотвращает преобразование времени UTC в локальное время.

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

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

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

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