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


DateTimeOffset.TryParseExact Метод

Определение

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

Перегрузки

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

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

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

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

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

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

TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTimeOffset)

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

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

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

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

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

Параметры

input
String

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

formats
String[]

Массив, определяющий ожидаемые форматы input.

formatProvider
IFormatProvider

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

styles
DateTimeStyles

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

result
DateTimeOffset

При возврате метода содержит DateTimeOffset эквивалент даты и времени input, если преобразование выполнено успешно или DateTimeOffset.MinValue, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если input не содержит допустимое строковое представление даты и времени или не содержит дату и время в ожидаемом формате, определенном formats, или если formatsnull. Этот параметр передается неинициализирован.

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

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

Исключения

styles включает неопределенное DateTimeStyles значение.

-или-

NoCurrentDateDefault не поддерживается.

-или-

styles включает взаимоисключающие значения DateTimeStyles.

Примеры

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

TextReader conIn = Console.In;
TextWriter conOut = Console.Out;
int tries = 0;
string input = String.Empty;

string[] formats = new string[] {"M/dd/yyyy HH:m zzz", "MM/dd/yyyy HH:m zzz",
                                 "M/d/yyyy HH:m zzz", "MM/d/yyyy HH:m zzz",
                                 "M/dd/yy HH:m zzz", "MM/dd/yy HH:m zzz",
                                 "M/d/yy HH:m zzz", "MM/d/yy HH:m zzz",
                                 "M/dd/yyyy H:m zzz", "MM/dd/yyyy H:m zzz",
                                 "M/d/yyyy H:m zzz", "MM/d/yyyy H:m zzz",
                                 "M/dd/yy H:m zzz", "MM/dd/yy H:m zzz",
                                 "M/d/yy H:m zzz", "MM/d/yy H:m zzz",
                                 "M/dd/yyyy HH:mm zzz", "MM/dd/yyyy HH:mm zzz",
                                 "M/d/yyyy HH:mm zzz", "MM/d/yyyy HH:mm zzz",
                                 "M/dd/yy HH:mm zzz", "MM/dd/yy HH:mm zzz",
                                 "M/d/yy HH:mm zzz", "MM/d/yy HH:mm zzz",
                                 "M/dd/yyyy H:mm zzz", "MM/dd/yyyy H:mm zzz",
                                 "M/d/yyyy H:mm zzz", "MM/d/yyyy H:mm zzz",
                                 "M/dd/yy H:mm zzz", "MM/dd/yy H:mm zzz",
                                 "M/d/yy H:mm zzz", "MM/d/yy H:mm zzz"};
IFormatProvider provider = CultureInfo.InvariantCulture.DateTimeFormat;
DateTimeOffset result;

do {
   conOut.WriteLine("Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),");
   conOut.Write("Then press Enter: ");
   input = conIn.ReadLine();
   conOut.WriteLine();
   if (DateTimeOffset.TryParseExact(input, formats, provider,
                                   DateTimeStyles.AllowWhiteSpaces,
                                   out result))
   {
      break;
   }
   else
   {
      Console.WriteLine("Unable to parse {0}.", input);
      tries++;
   }
} while (tries < 3);
if (tries >= 3)
   Console.WriteLine("Exiting application without parsing {0}", input);
else
   Console.WriteLine("{0} was converted to {1}", input, result.ToString());
// Some successful sample interactions with the user might appear as follows:
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/08/2007 6:54 -6:00
//
//    12/08/2007 6:54 -6:00 was converted to 12/8/2007 6:54:00 AM -06:00
//
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/8/2007 06:54 -06:00
//
//    12/8/2007 06:54 -06:00 was converted to 12/8/2007 6:54:00 AM -06:00
//
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/5/07 6:54 -6:00
//
//    12/5/07 6:54 -6:00 was converted to 12/5/2007 6:54:00 AM -06:00
let mutable result = None    
let mutable tries = 0
let mutable input = ""

let formats = 
    [| "M/dd/yyyy HH:m zzz"; "MM/dd/yyyy HH:m zzz"
       "M/d/yyyy HH:m zzz"; "MM/d/yyyy HH:m zzz"
       "M/dd/yy HH:m zzz"; "MM/dd/yy HH:m zzz"
       "M/d/yy HH:m zzz"; "MM/d/yy HH:m zzz"
       "M/dd/yyyy H:m zzz"; "MM/dd/yyyy H:m zzz"
       "M/d/yyyy H:m zzz"; "MM/d/yyyy H:m zzz"
       "M/dd/yy H:m zzz"; "MM/dd/yy H:m zzz"
       "M/d/yy H:m zzz"; "MM/d/yy H:m zzz"
       "M/dd/yyyy HH:mm zzz"; "MM/dd/yyyy HH:mm zzz"
       "M/d/yyyy HH:mm zzz"; "MM/d/yyyy HH:mm zzz"
       "M/dd/yy HH:mm zzz"; "MM/dd/yy HH:mm zzz"
       "M/d/yy HH:mm zzz"; "MM/d/yy HH:mm zzz"
       "M/dd/yyyy H:mm zzz"; "MM/dd/yyyy H:mm zzz"
       "M/d/yyyy H:mm zzz"; "MM/d/yyyy H:mm zzz"
       "M/dd/yy H:mm zzz"; "MM/dd/yy H:mm zzz"
       "M/d/yy H:mm zzz"; "MM/d/yy H:mm zzz" |]
let provider = CultureInfo.InvariantCulture.DateTimeFormat

while tries < 3 && result.IsNone do
    printfn "Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),"
    printf "Then press Enter: "
    input <- stdin.ReadLine()
    printfn ""
    match DateTimeOffset.TryParseExact(input, formats, provider, DateTimeStyles.AllowWhiteSpaces) with
    | true, dto ->
        result <- Some dto
    | _ ->
        printfn $"Unable to parse {input}."
    tries <- tries + 1

match result with
| Some result ->
    printfn $"{input} was converted to {result}"
| None ->
    printfn $"Exiting application without parsing {input}"

// Some successful sample interactions with the user might appear as follows:
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/08/2007 6:54 -6:00
//
//    12/08/2007 6:54 -6:00 was converted to 12/8/2007 6:54:00 AM -06:00
//
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/8/2007 06:54 -06:00
//
//    12/8/2007 06:54 -06:00 was converted to 12/8/2007 6:54:00 AM -06:00
//
//    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
//    Then press Enter: 12/5/07 6:54 -6:00
//
//    12/5/07 6:54 -6:00 was converted to 12/5/2007 6:54:00 AM -06:00
 Dim conIn As TextReader = Console.In
 Dim conOut As TextWriter = Console.Out
 Dim tries As Integer = 0
 Dim input As String = String.Empty
 Dim formats() As String = {"M/dd/yyyy HH:m zzz", "MM/dd/yyyy HH:m zzz", _
                            "M/d/yyyy HH:m zzz", "MM/d/yyyy HH:m zzz", _
                            "M/dd/yy HH:m zzz", "MM/dd/yy HH:m zzz", _
                            "M/d/yy HH:m zzz", "MM/d/yy HH:m zzz", _                                 
                            "M/dd/yyyy H:m zzz", "MM/dd/yyyy H:m zzz", _
                            "M/d/yyyy H:m zzz", "MM/d/yyyy H:m zzz", _
                            "M/dd/yy H:m zzz", "MM/dd/yy H:m zzz", _
                            "M/d/yy H:m zzz", "MM/d/yy H:m zzz", _                               
                            "M/dd/yyyy HH:mm zzz", "MM/dd/yyyy HH:mm zzz", _
                            "M/d/yyyy HH:mm zzz", "MM/d/yyyy HH:mm zzz", _
                            "M/dd/yy HH:mm zzz", "MM/dd/yy HH:mm zzz", _
                            "M/d/yy HH:mm zzz", "MM/d/yy HH:mm zzz", _                                 
                            "M/dd/yyyy H:mm zzz", "MM/dd/yyyy H:mm zzz", _
                            "M/d/yyyy H:mm zzz", "MM/d/yyyy H:mm zzz", _
                            "M/dd/yy H:mm zzz", "MM/dd/yy H:mm zzz", _
                            "M/d/yy H:mm zzz", "MM/d/yy H:mm zzz"}   
 Dim provider As IFormatProvider = CultureInfo.InvariantCulture.DateTimeFormat
 Dim result As DateTimeOffset

 Do 
    conOut.WriteLine("Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),")
    conOut.Write("Then press Enter: ")
    input = conIn.ReadLine()
    conOut.WriteLine() 
    If DateTimeOffset.TryParseExact(input, formats, provider, _
                                    DateTimeStyles.AllowWhiteSpaces, _
                                    result) Then
       Exit Do
    Else
       Console.WriteLine("Unable to parse {0}.", input)      
       tries += 1
    End If
 Loop While tries < 3
 If tries >= 3 Then
    Console.WriteLine("Exiting application without parsing {0}", input)
 Else
    Console.WriteLine("{0} was converted to {1}", input, result.ToString())                                                     
 End If 
 ' Some successful sample interactions with the user might appear as follows:
 '    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
 '    Then press Enter: 12/08/2007 6:54 -6:00
 '    
 '    12/08/2007 6:54 -6:00 was converted to 12/8/2007 6:54:00 AM -06:00         
 '    
 '    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
 '    Then press Enter: 12/8/2007 06:54 -06:00
 '    
 '    12/8/2007 06:54 -06:00 was converted to 12/8/2007 6:54:00 AM -06:00
 '    
 '    Enter a date, time, and offset (MM/DD/YYYY HH:MM +/-HH:MM),
 '    Then press Enter: 12/5/07 6:54 -6:00
 '    
 '    12/5/07 6:54 -6:00 was converted to 12/5/2007 6:54:00 AM -06:00

Комментарии

Метод TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTimeOffset) анализирует строковое представление даты, которая соответствует любому из шаблонов, назначенных массиву formats. Если строка input не соответствует ни одному из этих шаблонов с любыми вариациями, определенными параметром styles, операция синтаксического анализа завершается ошибкой, а метод возвращает false. Помимо сравнения input с несколькими строками, содержащими описатели формата, эта перегрузка ведет себя одинаково с методом DateTimeOffset.ParseExact(String, String[], IFormatProvider, DateTimeStyles).

Параметр formats — это массив строк, элементы которого содержат один описатель стандартного формата или один или несколько пользовательских описателей формата, определяющих возможный шаблон input. Дополнительные сведения о допустимых кодах форматирования см. в строках стандартного формата даты и времени и настраиваемых строк формата даты и времени. Если соответствующий элемент в formats включает z, zzили zzz настраиваемые описатели формата, указывающие, что смещение должно присутствовать в input, это смещение должно включать отрицательный знак или положительный знак. Если знак отсутствует, операция синтаксического анализа завершается ошибкой, и метод возвращает false.

Важный

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

Если соответствующий элемент в formats требует, чтобы input содержал дату, но не время, результирующий объект DateTimeOffset назначается время полуночи (0:00:00). Если соответствующий элемент в formats требует, чтобы входные данные содержали время, но не дату, результирующий объект DateTimeOffset назначается текущая дата в локальной системе. Если соответствующий элемент в formats не требует, чтобы input содержал смещение, смещение результирующего DateTimeOffset объекта зависит от значения параметра styles. Если styles включает AssumeLocal, то смещение локального часового пояса назначается объекту DateTimeOffset. Если styles включает AssumeUniversal, то для объекта DateTimeOffset назначается смещение (UTC) или +00:00. Если ни значение не указано, используется смещение локального часового пояса.

Определенные символы даты и времени, используемые в input, определяются параметром formatProvider. То же самое верно для точного шаблона input, если соответствующий элемент formats является строкой описателя стандартного формата. Параметр formatProvider может быть следующим:

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

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

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

Параметр styles определяет, разрешено ли пробел в входной строке, указывает, как строки без явного компонента смещения анализируются и поддерживают преобразование UTC в рамках операции синтаксического анализа. Поддерживаются все члены перечисления DateTimeStyles, кроме NoCurrentDateDefault. В следующей таблице перечислены эффекты каждого поддерживаемого элемента.

элемент DateTimeStyles Поведение
AdjustToUniversal Синтаксический анализ input и при необходимости преобразует его в формате UTC. Он эквивалентен синтаксическому анализу строки и вызову метода DateTimeOffset.ToUniversalTime возвращаемого объекта DateTimeOffset.
AssumeLocal Если соответствующий элемент в formats не требует, чтобы input содержал значение смещения, возвращенный объект DateTimeOffset получает смещение локального часового пояса. Это значение по умолчанию.
AssumeUniversal Если соответствующий элемент в formats не требует, чтобы input содержало значение смещения, возвращенный DateTimeOffset объект получает смещение UTC (+00:00).
AllowInnerWhite Позволяет input включать внутреннее пробелы, не указанные элементами в formats. Дополнительное пробел может отображаться между компонентами даты и времени и внутри отдельных компонентов (за исключением смещения) и игнорируется при анализе строки.
AllowLeadingWhite Позволяет input включать ведущие пробелы, не указанные элементами в formats. Они игнорируются при анализе строки.
AllowTrailingWhite Позволяет input включать конечные пробелы, не указанные элементами в formats. Они игнорируются при анализе строки.
AllowWhiteSpaces Позволяет input включать начальные, конечные и внутренние пространства, не указанные элементами в formats. Все дополнительные символы пробела, не указанные в сопоставленном элементе в formats, игнорируются при синтаксическом анализе строки.
None Указывает, что дополнительное пробелы не разрешены в input. Пробел должен отображаться точно так же, как указано в определенном элементе в formats для успешного сопоставления. Это поведение по умолчанию.
RoundtripKind Не влияет, так как структура DateTimeOffset не включает свойство Kind.

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

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

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

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

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

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

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

Параметры

input
ReadOnlySpan<Char>

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

format
ReadOnlySpan<Char>

Описатель формата, определяющий обязательный формат input.

formatProvider
IFormatProvider

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

styles
DateTimeStyles

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

result
DateTimeOffset

При возврате метода содержит DateTimeOffset эквивалент даты и времени input, если преобразование выполнено успешно или DateTimeOffset.MinValue, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если

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

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

Исключения

styles включает неопределенное DateTimeStyles значение. -или- NoCurrentDateDefault не поддерживается. -или- styles включает взаимоисключающие значения DateTimeStyles.

Комментарии

Эта перегрузка похожа на метод DateTimeOffset.ParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles), за исключением того, что этот метод не создает исключение, если преобразование завершается ошибкой. Он анализирует представление даты и времени, которое должно точно соответствовать шаблону, указанному параметром format. Если input не соответствует этому шаблону, при наличии некоторых возможных вариантов пробела, определенных параметром styles, операция синтаксического анализа завершается ошибкой, а метод возвращает false.

Параметр format — это диапазон символов, содержащий один описатель стандартного формата или один или несколько настраиваемых описателей формата, определяющих требуемый шаблон input. Дополнительные сведения о допустимых кодах форматирования см. в строках стандартного формата даты и времени и настраиваемых строк формата даты и времени. Если format включает z, zzили zzz настраиваемые описатели формата, указывающие, что смещение должно присутствовать в input, это смещение должно включать отрицательный знак или положительный знак. Если знак отсутствует, операция синтаксического анализа завершается ошибкой, и метод возвращает false.

Если format требует, чтобы input содержали дату, но не время, результирующий объект DateTimeOffset назначается время полуночи (0:00:00). Если format требуется, чтобы input содержали время, но не дату, результирующий объект DateTimeOffset назначается текущей дате в локальной системе. Если format не требует, чтобы input содержал смещение, смещение результирующего объекта DateTimeOffset зависит от значения параметра styles. Если styles включает AssumeLocal, то смещение локального часового пояса назначается объекту DateTimeOffset. Если styles включает AssumeUniversal, то для объекта DateTimeOffset назначается смещение (UTC) или +00:00. Если ни значение не указано, используется смещение локального часового пояса.

Определенные символы даты и времени, используемые в input, определяются параметром formatProvider. То же самое верно для точного шаблона input, если format является строкой описателя стандартного формата. Параметр formatProvider может быть следующим:

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

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

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

Параметр styles определяет, разрешено ли пробел в входной строке, указывает, как строки без явного компонента смещения анализируются и поддерживают преобразование в формате UTC в рамках операции синтаксического анализа. Поддерживаются все члены перечисления DateTimeStyles, кроме NoCurrentDateDefault. В следующей таблице перечислены эффекты каждого поддерживаемого элемента.

элемент DateTimeStyles Поведение
AdjustToUniversal Синтаксический анализ input и при необходимости преобразует его в формате UTC. Он эквивалентен синтаксическому представлению даты и времени, а затем вызывает метод DateTimeOffset.ToUniversalTime возвращаемого объекта DateTimeOffset.
AssumeLocal Если format не требует, чтобы input содержали значение смещения, возвращенный объект DateTimeOffset получает смещение локального часового пояса. Это поведение по умолчанию.
AssumeUniversal Если format не требует, чтобы input содержали значение смещения, возвращенный объект DateTimeOffset получает смещение UTC (+00:00).
AllowInnerWhite Позволяет input включать внутреннее пробелы, не указанные в формате. Дополнительное пробел может отображаться между компонентами даты и времени и внутри отдельных компонентов, кроме смещения, и игнорируется при анализе строки.
AllowLeadingWhite Позволяет input включать ведущие пробелы, не указанные format. Они игнорируются при анализе строки.
AllowTrailingWhite Позволяет input включать конечные пробелы, не указанные format. Они игнорируются при анализе строки.
AllowWhiteSpaces Позволяет input включать начальные, конечные и внутренние пространства, не указанные format. Все дополнительные символы пробелов, не указанные в format, игнорируются при анализе строки.
None Указывает, что дополнительное пробелы не разрешены в input. Пробел должен отображаться точно так же, как указано в format. Это поведение по умолчанию.
RoundtripKind Не действует, так как структура DateTimeOffset не включает свойство Kind.

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

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

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

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

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

Параметры

input
ReadOnlySpan<Char>

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

formats
String[]

Массив строк стандартного или пользовательского формата, определяющих допустимые форматы input.

formatProvider
IFormatProvider

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

styles
DateTimeStyles

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

result
DateTimeOffset

При возврате метода содержит DateTimeOffset эквивалент даты и времени input, если преобразование выполнено успешно или DateTimeOffset.MinValue, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если

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

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

Исключения

styles включает неопределенное DateTimeStyles значение. -или- NoCurrentDateDefault не поддерживается. -или- styles включает взаимоисключающие значения DateTimeStyles.

Комментарии

Этот метод анализирует строковое представление даты, которая соответствует любому из шаблонов, назначенных массиву formats. Если input не соответствует ни одному из этих шаблонов с любыми вариациями, определенными параметром styles, операция синтаксического анализа завершается ошибкой, а метод возвращает false. Помимо сравнения input с несколькими строками, содержащими описатели формата, эта перегрузка ведет себя одинаково с методом DateTimeOffset.ParseExact(ReadOnlySpan<Char>, String[], IFormatProvider, DateTimeStyles).

Параметр formats — это массив строк, элементы которого содержат один описатель стандартного формата или один или несколько пользовательских описателей формата, определяющих возможный шаблон input. Дополнительные сведения о допустимых кодах форматирования см. в строках стандартного формата даты и времени и настраиваемых строк формата даты и времени. Если соответствующий элемент в formats включает z, zzили zzz настраиваемые описатели формата, указывающие, что смещение должно присутствовать в input, это смещение должно включать отрицательный знак или положительный знак. Если знак отсутствует, операция синтаксического анализа завершается ошибкой, и метод возвращает false.

Важный

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

Если соответствующий элемент в formats требует, чтобы input содержал дату, но не время, результирующий объект DateTimeOffset назначается время полуночи (0:00:00). Если соответствующий элемент в formats требует, чтобы входные данные содержали время, но не дату, результирующий объект DateTimeOffset назначается текущая дата в локальной системе. Если соответствующий элемент в formats не требует, чтобы input содержал смещение, смещение результирующего DateTimeOffset объекта зависит от значения параметра styles. Если styles включает DateTimeStyles.AssumeLocal, то смещение локального часового пояса назначается объекту DateTimeOffset. Если styles включает DateTimeStyles.AssumeUniversal, то для объекта DateTimeOffset назначается смещение (UTC) или +00:00. Если ни значение не указано, используется смещение локального часового пояса.

Определенные символы даты и времени, используемые в input, определяются параметром formatProvider. То же самое верно для точного шаблона input, если соответствующий элемент formats является строкой описателя стандартного формата. Параметр formatProvider может быть следующим:

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

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

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

Параметр styles определяет, разрешено ли пробел в входной строке, указывает, как строки без явного компонента смещения анализируются и поддерживают преобразование UTC в рамках операции синтаксического анализа. Поддерживаются все члены перечисления DateTimeStyles, кроме NoCurrentDateDefault. В следующей таблице перечислены эффекты каждого поддерживаемого элемента.

элемент DateTimeStyles Поведение
AdjustToUniversal Синтаксический анализ input и при необходимости преобразует его в формате UTC. Он эквивалентен синтаксическому анализу строки и вызову метода DateTimeOffset.ToUniversalTime возвращаемого объекта DateTimeOffset.
AssumeLocal Если соответствующий элемент в formats не требует, чтобы input содержал значение смещения, возвращенный объект DateTimeOffset получает смещение локального часового пояса. Это значение по умолчанию.
AssumeUniversal Если соответствующий элемент в formats не требует, чтобы input содержало значение смещения, возвращенный DateTimeOffset объект получает смещение UTC (+00:00).
AllowInnerWhite Позволяет input включать внутреннее пробелы, не указанные элементами в formats. Дополнительное пробел может отображаться между компонентами даты и времени и внутри отдельных компонентов (за исключением смещения) и игнорируется при анализе строки.
AllowLeadingWhite Позволяет input включать ведущие пробелы, не указанные элементами в formats. Они игнорируются при анализе строки.
AllowTrailingWhite Позволяет input включать конечные пробелы, не указанные элементами в formats. Они игнорируются при анализе строки.
AllowWhiteSpaces Позволяет input включать начальные, конечные и внутренние пространства, не указанные элементами в formats. Все дополнительные символы пробела, не указанные в сопоставленном элементе в formats, игнорируются при синтаксическом анализе строки.
None Указывает, что дополнительное пробелы не разрешены в input. Пробел должен отображаться точно так же, как указано в определенном элементе в formats для успешного сопоставления. Это поведение по умолчанию.
RoundtripKind Не влияет, так как структура DateTimeOffset не включает свойство Kind.

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

TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTimeOffset)

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

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

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

Параметры

input
String

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

format
String

Описатель формата, определяющий обязательный формат input.

formatProvider
IFormatProvider

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

styles
DateTimeStyles

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

result
DateTimeOffset

При возврате метода содержит DateTimeOffset эквивалент даты и времени input, если преобразование выполнено успешно или DateTimeOffset.MinValue, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр inputnullили не содержит допустимое строковое представление даты и времени в ожидаемом формате, определенном format и provider. Этот параметр передается неинициализирован.

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

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

Исключения

styles включает неопределенное DateTimeStyles значение.

-или-

NoCurrentDateDefault не поддерживается.

-или-

styles включает взаимоисключающие значения DateTimeStyles.

Примеры

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

string dateString, format;
DateTimeOffset result;
IFormatProvider provider = CultureInfo.InvariantCulture;

// Parse date-only value with invariant culture and assume time is UTC.
dateString = "06/15/2008";
format = "d";
if (DateTimeOffset.TryParseExact(dateString, format, provider,
                                 DateTimeStyles.AssumeUniversal,
                                 out result))
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
else
   Console.WriteLine("'{0}' is not in the correct format.", dateString);

// Parse date-only value with leading white space.
// Should return False because only trailing white space is
// specified in method call.
dateString = " 06/15/2008";
if (DateTimeOffset.TryParseExact(dateString, format, provider,
                                 DateTimeStyles.AllowTrailingWhite,
                                 out result))
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
else
   Console.WriteLine("'{0}' is not in the correct format.", dateString);

// Parse date and time value, and allow all white space.
dateString = " 06/15/   2008  15:15    -05:00";
format = "MM/dd/yyyy H:mm zzz";
if (DateTimeOffset.TryParseExact(dateString, format, provider,
                                 DateTimeStyles.AllowWhiteSpaces,
                                 out result))
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
else
   Console.WriteLine("'{0}' is not in the correct format.", dateString);

// Parse date and time and convert to UTC.
dateString = "  06/15/2008 15:15:30 -05:00";
format = "MM/dd/yyyy H:mm:ss zzz";
if (DateTimeOffset.TryParseExact(dateString, format, provider,
                                DateTimeStyles.AllowWhiteSpaces |
                                DateTimeStyles.AdjustToUniversal,
                                out result))
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString());
else
   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 +00:00.
//    ' 06/15/2008' is not in the correct format.
//    ' 06/15/   2008  15:15    -05:00' converts to 6/15/2008 3:15:00 PM -05:00.
//    '  06/15/2008 15:15:30 -05:00' converts to 6/15/2008 8:15:30 PM +00:00.
let provider = CultureInfo.InvariantCulture

// Parse date-only value with invariant culture and assume time is UTC.
let dateString = "06/15/2008"
let format = "d"
match DateTimeOffset.TryParseExact(dateString, format, provider, DateTimeStyles.AssumeUniversal) with
| true, result ->
    printfn $"'{dateString}' converts to {result}."
| _ ->
    printfn $"'{dateString}' is not in the correct format."

// Parse date-only value with leading white space.
// Should return False because only trailing white space is
// specified in method call.
let dateString = " 06/15/2008"
match DateTimeOffset.TryParseExact(dateString, format, provider, DateTimeStyles.AllowTrailingWhite) with
| true, result ->
    printfn $"'{dateString}' converts to {result}."
| _ ->
    printfn $"'{dateString}' is not in the correct format."

// Parse date and time value, and allow all white space.
let dateString = " 06/15/   2008  15:15    -05:00"
let format = "MM/dd/yyyy H:mm zzz"
match DateTimeOffset.TryParseExact(dateString, format, provider, DateTimeStyles.AllowWhiteSpaces) with
| true, result ->
    printfn $"'{dateString}' converts to {result}."
| _ ->
    printfn $"'{dateString}' is not in the correct format."

// Parse date and time and convert to UTC.
let dateString = "  06/15/2008 15:15:30 -05:00"
let format = "MM/dd/yyyy H:mm:ss zzz"
match DateTimeOffset.TryParseExact(dateString, format, provider, DateTimeStyles.AllowWhiteSpaces ||| DateTimeStyles.AdjustToUniversal) with
| true, result ->
    printfn $"'{dateString}' converts to {result}."
| _ ->
    printfn $"'{dateString}' is not in the correct format."

// The example displays the following output:
//    '06/15/2008' converts to 6/15/2008 12:00:00 AM +00:00.
//    ' 06/15/2008' is not in the correct format.
//    ' 06/15/   2008  15:15    -05:00' converts to 6/15/2008 3:15:00 PM -05:00.
//    '  06/15/2008 15:15:30 -05:00' converts to 6/15/2008 8:15:30 PM +00:00.
Dim dateString, format As String  
Dim result As DateTimeOffset
Dim provider As CultureInfo = CultureInfo.InvariantCulture

' Parse date-only value with invariant culture and assume time is UTC.
dateString = "06/15/2008"
format = "d"
If DateTimeOffset.TryParseExact(dateString, format, provider, _
                                   DateTimeStyles.AssumeUniversal, _
                                   result) Then
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Else
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End If 

' Parse date-only value with leading white space.
' Should return False because only trailing white space is  
' specified in method call.
dateString = " 06/15/2008"
If DateTimeOffset.TryParseExact(dateString, format, provider, _
                                DateTimeStyles.AllowTrailingWhite, _
                                result) Then
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Else
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End If 

' Parse date and time value, and allow all white space.
dateString = " 06/15/   2008  15:15    -05:00"
format = "MM/dd/yyyy H:mm zzz"
If DateTimeOffset.TryParseExact(dateString, format, provider, _
                                DateTimeStyles.AllowWhiteSpaces, _
                                result) Then
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Else
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End If 

' Parse date and time and convert to UTC.
dateString = "  06/15/2008 15:15:30 -05:00"   
format = "MM/dd/yyyy H:mm:ss zzz"       
If DateTimeOffset.TryParseExact(dateString, format, provider, _
                                DateTimeStyles.AllowWhiteSpaces Or _
                                DateTimeStyles.AdjustToUniversal, _
                                result) Then
   Console.WriteLine("'{0}' converts to {1}.", dateString, result.ToString())
Else
   Console.WriteLine("'{0}' is not in the correct format.", dateString)
End If 
' The example displays the following output:
'    '06/15/2008' converts to 6/15/2008 12:00:00 AM +00:00.
'    ' 06/15/2008' is not in the correct format.
'    ' 06/15/   2008  15:15    -05:00' converts to 6/15/2008 3:15:00 PM -05:00.
'    '  06/15/2008 15:15:30 -05:00' converts to 6/15/2008 8:15:30 PM +00:00.

В следующем примере используется множество значений DateTimeStyles для анализа массива строк, которые, как ожидается, соответствуют ISO 8601. Как показано в выходных данных примера, строки, которые находятся в правильном формате, не могут анализироваться, если:

  • они содержат пробелы и соответствующий флаг DateTimeStyles (например, DateTimeStyles.AllowWhiteSpaces не был предоставлен в вызове метода.

  • они содержат элементы даты и времени, которые находятся вне диапазона.

Предполагается, что строки, не указывающие смещение в формате UTC, имеют смещение локального часового пояса (в данном случае –07:00, которое отражает смещение часового пояса Тихоокеанского дня), если в вызове метода не указан флаг DateTimeStyles.AssumeUniversal. В этом случае они считаются универсальным координированным временем.

open System
open System.Globalization

let parseWithISO8601 dateStrings styles =
    printfn $"Parsing with {styles}:"
    for dateString in dateStrings do
        match DateTimeOffset.TryParseExact(dateString, "O", null, styles) with
        | true, date ->
            printfn $"""   {dateString,-35} --> {date.ToString "yyyy-MM-dd HH:mm:ss.FF zzz"}"""
        | _ ->
            printfn $"   Unable to convert '{dateString}'"

let dateStrings = 
    [ "2018-08-18T12:45:16.0000000Z"
      "2018/08/18T12:45:16.0000000Z"
      "2018-18-08T12:45:16.0000000Z"
      "2018-08-18T12:45:16.0000000"
      " 2018-08-18T12:45:16.0000000Z "
      "2018-08-18T12:45:16.0000000+02:00"
      "2018-08-18T12:45:16.0000000-07:00" ]

parseWithISO8601 dateStrings DateTimeStyles.None
printfn "\n-----\n"
parseWithISO8601 dateStrings DateTimeStyles.AllowWhiteSpaces
printfn "\n-----\n"
parseWithISO8601 dateStrings DateTimeStyles.AdjustToUniversal
printfn "\n-----\n"
parseWithISO8601 dateStrings DateTimeStyles.AssumeLocal
printfn "\n-----\n"
parseWithISO8601 dateStrings DateTimeStyles.AssumeUniversal

// The example displays the following output:
//      Parsing with None:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
//
//      -----
//
//      Parsing with AllowWhiteSpaces:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//          2018-08-18T12:45:16.0000000Z       --> 2018-08-18 12:45:16 +00:00
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
//
//      -----
//
//      Parsing with AdjustToUniversal:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 19:45:16 +00:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 10:45:16 +00:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 19:45:16 +00:00
//
//      -----
//
//      Parsing with AssumeLocal:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
//
//      -----
//
//      Parsing with AssumeUniversal:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 +00:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] dateStrings = { "2018-08-18T12:45:16.0000000Z",
                               "2018/08/18T12:45:16.0000000Z",
                               "2018-18-08T12:45:16.0000000Z",
                               "2018-08-18T12:45:16.0000000",                               
                               " 2018-08-18T12:45:16.0000000Z ",
                               "2018-08-18T12:45:16.0000000+02:00",
                               "2018-08-18T12:45:16.0000000-07:00" }; 
      
      ParseWithISO8601(dateStrings, DateTimeStyles.None);
      Console.WriteLine("\n-----\n");
      ParseWithISO8601(dateStrings, DateTimeStyles.AllowWhiteSpaces);
      Console.WriteLine("\n-----\n");
      ParseWithISO8601(dateStrings, DateTimeStyles.AdjustToUniversal);
      Console.WriteLine("\n-----\n");
      ParseWithISO8601(dateStrings, DateTimeStyles.AssumeLocal);
      Console.WriteLine("\n-----\n");
      ParseWithISO8601(dateStrings, DateTimeStyles.AssumeUniversal);   }

   private static void ParseWithISO8601(string[] dateStrings, DateTimeStyles styles)
   {   
      Console.WriteLine($"Parsing with {styles}:");
      DateTimeOffset date;
      foreach (var dateString in dateStrings)
      {
         if (DateTimeOffset.TryParseExact(dateString, "O", null, styles, out date))
         {
            Console.WriteLine($"   {dateString,-35} --> {date:yyyy-MM-dd HH:mm:ss.FF zzz}");
         }
         else
         {
            Console.WriteLine($"   Unable to convert '{dateString}'");
         }   
      } 
   }
}
// The example displays the following output:
//      Parsing with None:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
//
//      -----
//
//      Parsing with AllowWhiteSpaces:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//          2018-08-18T12:45:16.0000000Z       --> 2018-08-18 12:45:16 +00:00
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
//
//      -----
//
//      Parsing with AdjustToUniversal:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 19:45:16 +00:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 10:45:16 +00:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 19:45:16 +00:00
//
//      -----
//
//      Parsing with AssumeLocal:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
//
//      -----
//
//      Parsing with AssumeUniversal:
//         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
//         Unable to convert '2018/08/18T12:45:16.0000000Z'
//         Unable to convert '2018-18-08T12:45:16.0000000Z'
//         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 +00:00
//         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
//         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
//         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
Imports System.Globalization

Public Module Example
   Public Sub Main()
      Dim dateStrings() = { "2018-08-18T12:45:16.0000000Z",
                            "2018/08/18T12:45:16.0000000Z",
                            "2018-18-08T12:45:16.0000000Z",
                            "2018-08-18T12:45:16.0000000",                               
                            " 2018-08-18T12:45:16.0000000Z ",
                            "2018-08-18T12:45:16.0000000+02:00",
                            "2018-08-18T12:45:16.0000000-07:00" } 
      
      ParseWithISO8601(dateStrings, DateTimeStyles.None)
      Console.WriteLine($"{vbCrLf}-----{vbCrLf}")
      ParseWithISO8601(dateStrings, DateTimeStyles.AllowWhiteSpaces)
      Console.WriteLine($"{vbCrLf}-----{vbCrLf}")
      ParseWithISO8601(dateStrings, DateTimeStyles.AdjustToUniversal)
      Console.WriteLine($"{vbCrLf}-----{vbCrLf}")
      ParseWithISO8601(dateStrings, DateTimeStyles.AssumeLocal)
      Console.WriteLine($"{vbCrLf}-----{vbCrLf}")
      ParseWithISO8601(dateStrings, DateTimeStyles.AssumeUniversal)   
   End Sub

   Private Sub ParseWithISO8601(dateStrings() As String, styles As DateTimeStyles)
      Console.WriteLine($"Parsing with {styles}:")
      Dim dat As DateTimeOffset
      For Each dateStr In dateStrings
         If DateTimeOffset.TryParseExact(dateStr, "O", Nothing, styles, dat) Then
            Console.WriteLine($"   {dateStr,-35} --> {dat:yyyy-MM-dd HH:mm:ss.FF zzz}")
         Else
            Console.WriteLine($"   Unable to convert '{dateStr}'")
         End If   
      Next 
   End Sub
End Module
' The example displays the following output:
'      Parsing with None:
'         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
'         Unable to convert '2018/08/18T12:45:16.0000000Z'
'         Unable to convert '2018-18-08T12:45:16.0000000Z'
'         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
'         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
'         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
'         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
'
'      -----
'
'      Parsing with AllowWhiteSpaces:
'         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
'         Unable to convert '2018/08/18T12:45:16.0000000Z'
'         Unable to convert '2018-18-08T12:45:16.0000000Z'
'         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
'          2018-08-18T12:45:16.0000000Z       --> 2018-08-18 12:45:16 +00:00
'         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
'         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
'
'      -----
'
'      Parsing with AdjustToUniversal:
'         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
'         Unable to convert '2018/08/18T12:45:16.0000000Z'
'         Unable to convert '2018-18-08T12:45:16.0000000Z'
'         2018-08-18T12:45:16.0000000         --> 2018-08-18 19:45:16 +00:00
'         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
'         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 10:45:16 +00:00
'         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 19:45:16 +00:00
'
'      -----
'
'      Parsing with AssumeLocal:
'         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
'         Unable to convert '2018/08/18T12:45:16.0000000Z'
'         Unable to convert '2018-18-08T12:45:16.0000000Z'
'         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 -07:00
'         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
'         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
'         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00
'
'      -----
'
'      Parsing with AssumeUniversal:
'         2018-08-18T12:45:16.0000000Z        --> 2018-08-18 12:45:16 +00:00
'         Unable to convert '2018/08/18T12:45:16.0000000Z'
'         Unable to convert '2018-18-08T12:45:16.0000000Z'
'         2018-08-18T12:45:16.0000000         --> 2018-08-18 12:45:16 +00:00
'         Unable to convert ' 2018-08-18T12:45:16.0000000Z '
'         2018-08-18T12:45:16.0000000+02:00   --> 2018-08-18 12:45:16 +02:00
'         2018-08-18T12:45:16.0000000-07:00   --> 2018-08-18 12:45:16 -07:00

Комментарии

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

Параметр format — это строка, содержащая один описатель стандартного формата или один или несколько пользовательских описателей формата, определяющих обязательный шаблон input. Дополнительные сведения о допустимых кодах форматирования см. в строках стандартного формата даты и времени и настраиваемых строк формата даты и времени. Если format включает z, zzили zzz настраиваемые описатели формата, указывающие, что смещение должно присутствовать в input, это смещение должно включать отрицательный знак или положительный знак. Если знак отсутствует, операция синтаксического анализа завершается ошибкой, и метод возвращает false.

Если format требует, чтобы input содержали дату, но не время, результирующий объект DateTimeOffset назначается время полуночи (0:00:00). Если format требуется, чтобы input содержали время, но не дату, результирующий объект DateTimeOffset назначается текущей дате в локальной системе. Если format не требует, чтобы input содержал смещение, смещение результирующего объекта DateTimeOffset зависит от значения параметра styles. Если styles включает AssumeLocal, то смещение локального часового пояса назначается объекту DateTimeOffset. Если styles включает AssumeUniversal, то для объекта DateTimeOffset назначается смещение (UTC) или +00:00. Если ни значение не указано, используется смещение локального часового пояса.

Определенные символы даты и времени, используемые в input, определяются параметром formatProvider. То же самое верно для точного шаблона input, если format является строкой описателя стандартного формата. Параметр formatProvider может быть следующим:

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

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

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

Параметр styles определяет, разрешено ли пробел в входной строке, указывает, как строки без явного компонента смещения анализируются и поддерживают преобразование в формате UTC в рамках операции синтаксического анализа. Поддерживаются все члены перечисления DateTimeStyles, кроме NoCurrentDateDefault. В следующей таблице перечислены эффекты каждого поддерживаемого элемента.

элемент DateTimeStyles Поведение
AdjustToUniversal Синтаксический анализ input и при необходимости преобразует его в формате UTC. Он эквивалентен синтаксическому анализу строки и вызову метода DateTimeOffset.ToUniversalTime возвращаемого объекта DateTimeOffset.
AssumeLocal Если format не требует, чтобы input содержали значение смещения, возвращенный объект DateTimeOffset получает смещение локального часового пояса. Это поведение по умолчанию.
AssumeUniversal Если format не требует, чтобы input содержали значение смещения, возвращенный объект DateTimeOffset получает смещение UTC (+00:00).
AllowInnerWhite Позволяет input включать внутреннее пробелы, не указанные в формате. Дополнительное пробел может отображаться между компонентами даты и времени и внутри отдельных компонентов, кроме смещения, и игнорируется при анализе строки.
AllowLeadingWhite Позволяет input включать ведущие пробелы, не указанные format. Они игнорируются при анализе строки.
AllowTrailingWhite Позволяет input включать конечные пробелы, не указанные format. Они игнорируются при анализе строки.
AllowWhiteSpaces Позволяет input включать начальные, конечные и внутренние пространства, не указанные format. Все дополнительные символы пробелов, не указанные в format, игнорируются при анализе строки.
None Указывает, что дополнительное пробелы не разрешены в input. Пробел должен отображаться точно так же, как указано в format. Это поведение по умолчанию.
RoundtripKind Не действует, так как структура DateTimeOffset не включает свойство Kind.

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

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

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

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