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.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или если formats имеет значение null. Этот параметр передается неинициализирован.
Возвращаемое значение
Исключения
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 себя zzzили настраиваемые описатели формата, указывающие на то, что смещение должно присутствоватьinput, это смещение должно включать либо отрицательный знак, либо zzz положительный знак. Если знак отсутствует, операция синтаксического анализа завершается ошибкой, и метод возвращается false.
Важный
formats Использование параметра этой перегрузки для указания нескольких форматов может помочь уменьшить разочарование многих пользователей при вводе дат и времени. В частности, возможность определения нескольких шаблонов входных данных позволяет приложению обрабатывать представления даты и времени, которые могут включать или не содержать начальные нули в месяцах, днях, часах, минутах и секундах. В этом примере представлена иллюстрация этого.
Если соответствующий элемент требует formats , чтобы input он содержал дату, но не время, результирующий DateTimeOffset объект назначается время полуночи (0:00:00). Если соответствующий элемент требует formats , чтобы входные данные содержали время, но не дату, результирующий DateTimeOffset объект назначает текущую дату в локальной системе. Если соответствующий элемент formats не требует input смещения, смещение результирующего DateTimeOffset объекта зависит от значения styles параметра. Если styles включается AssumeLocal, то для объекта назначается смещение локального часового пояса DateTimeOffset . Если styles включается AssumeUniversalсмещение "Координированное универсальное время (UTC) или +00:00, назначается объекту DateTimeOffset . Если ни значение не указано, используется смещение локального часового пояса.
Определенные символы даты и времени, используемые в input параметре formatProvider . То же самое верно для точного шаблона input , если соответствующий элемент является строкой описателя стандартного formats формата. Параметр formatProvider может иметь одно из следующих значений:
Объект CultureInfo , представляющий язык и региональные параметры, основанные на интерпретации
input. Объект, DateTimeFormatInfo возвращаемый свойством CultureInfo.DateTimeFormat , определяет символы и форматирование вinput.Объект DateTimeFormatInfo , определяющий формат данных даты и времени.
В противном formatprovidernullCultureInfo случае используется объект, соответствующий текущему языку и региональным параметрам.
Параметр 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 возвращаетсяfalse, если строка, которую нужно проанализировать, TryParseExact содержит компонент часа и конструктор AM/PM, которые не находятся в соглашении. В .NET Framework 3.5 и более ранних версиях конструктор AM/PM игнорируется.
Применяется к
TryParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles, DateTimeOffset)
- Исходный код:
- DateTimeOffset.cs
- Исходный код:
- DateTimeOffset.cs
- Исходный код:
- 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 , если преобразование завершилось сбоем. Преобразование завершается ошибкой, если
Возвращаемое значение
Исключения
styles включает неопределенное DateTimeStyles значение.
-или- NoCurrentDateDefault не поддерживается.
-или- styles включает взаимоисключающие DateTimeStyles значения.
Комментарии
Эта перегрузка DateTimeOffset.ParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles) похожа на метод, за исключением того, что этот метод не создает исключение, если преобразование завершается ошибкой. Он анализирует представление даты и времени, которое должно точно соответствовать шаблону, указанному параметром format . Если input этот шаблон не соответствует этому шаблону, при наличии некоторых возможных вариантов пробела, определенных styles параметром, операция синтаксического анализа завершается ошибкой, и метод возвращается false.
Параметр format — это диапазон символов, содержащий один стандартный описатель формата или один или несколько пользовательских описателей формата, определяющих обязательный шаблон input. Дополнительные сведения о допустимых кодах форматирования см. в разделе "Стандартные строки формата даты и времени" и"Настраиваемые строки формата даты и времени". Если format содержит zописатели формата , zzили настраиваемые описатели формата, указывающие, что смещение должно присутствовать в input, это смещение должно включать либо отрицательный знак, либо zzz положительный знак. Если знак отсутствует, операция синтаксического анализа завершается ошибкой и метод возвращается false.
Если format требуется, чтобы input содержать дату, но не время, результирующий DateTimeOffset объект назначается время полуночи (0:00:00). Если format требуется, чтобы input он содержал время, но не дату, результирующий DateTimeOffset объект назначается текущая дата в локальной системе. Если format не требуется input смещение, смещение результирующего DateTimeOffset объекта зависит от значения styles параметра. Если styles включается AssumeLocal, то для объекта назначается смещение локального часового пояса DateTimeOffset . Если styles включается AssumeUniversalсмещение "Координированное универсальное время (UTC) или +00:00, назначается объекту DateTimeOffset . Если ни значение не указано, используется смещение локального часового пояса.
Определенные символы даты и времени, используемые в input параметре formatProvider . То же самое верно для точного шаблона, если format это строка описателя стандартного input формата. Параметр formatProvider может иметь одно из следующих значений:
Объект CultureInfo , представляющий язык и региональные параметры, основанные на интерпретации
input. Объект, DateTimeFormatInfo возвращаемый свойством CultureInfo.DateTimeFormat , определяет символы и стандартные форматы, разрешенные вinput.Объект DateTimeFormatInfo , определяющий формат данных даты и времени.
В противном formatprovidernullCultureInfo случае используется объект, соответствующий текущему языку и региональным параметрам.
Параметр 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.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 , если преобразование завершилось сбоем. Преобразование завершается ошибкой, если
Возвращаемое значение
Исключения
styles включает неопределенное DateTimeStyles значение.
-или- NoCurrentDateDefault не поддерживается.
-или- styles включает взаимоисключающие DateTimeStyles значения.
Комментарии
Этот метод анализирует строковое представление даты, которая соответствует любому из шаблонов, назначенных массиву formats . Если input ни один из этих шаблонов не соответствует любым вариациям, определенным параметром styles , операция синтаксического анализа завершается ошибкой, а метод возвращается false. Помимо сравнения input с несколькими строками, содержащими описатели формата, эта перегрузка ведет себя одинаково с методом DateTimeOffset.ParseExact(ReadOnlySpan<Char>, String[], IFormatProvider, DateTimeStyles) .
Параметр formats представляет собой массив строк, элементы которого содержат один стандартный описатель формата или один или несколько настраиваемых описателей формата, определяющих возможный шаблон input. Дополнительные сведения о допустимых кодах форматирования см. в разделе "Стандартные строки формата даты и времени" и"Настраиваемые строки формата даты и времени". Если соответствующий элемент включает в formats себя zzzили настраиваемые описатели формата, указывающие на то, что смещение должно присутствоватьinput, это смещение должно включать либо отрицательный знак, либо zzz положительный знак. Если знак отсутствует, операция синтаксического анализа завершается ошибкой, и метод возвращается false.
Важный
formats Использование параметра этой перегрузки для указания нескольких форматов может помочь уменьшить разочарование многих пользователей при вводе дат и времени. В частности, возможность определения нескольких шаблонов входных данных позволяет приложению обрабатывать представления даты и времени, которые могут включать или не содержать начальные нули в месяцах, днях, часах, минутах и секундах. В этом примере представлена иллюстрация этого.
Если соответствующий элемент требует formats , чтобы input он содержал дату, но не время, результирующий DateTimeOffset объект назначается время полуночи (0:00:00). Если соответствующий элемент требует formats , чтобы входные данные содержали время, но не дату, результирующий DateTimeOffset объект назначает текущую дату в локальной системе. Если соответствующий элемент formats не требует input смещения, смещение результирующего DateTimeOffset объекта зависит от значения styles параметра. Если styles включается DateTimeStyles.AssumeLocal, то для объекта назначается смещение локального часового пояса DateTimeOffset . Если styles включается DateTimeStyles.AssumeUniversalсмещение "Координированное универсальное время (UTC) или +00:00, назначается объекту DateTimeOffset . Если ни значение не указано, используется смещение локального часового пояса.
Определенные символы даты и времени, используемые в input параметре formatProvider . То же самое верно для точного шаблона input , если соответствующий элемент является строкой описателя стандартного formats формата. Параметр formatProvider может иметь одно из следующих значений:
Объект CultureInfo , представляющий язык и региональные параметры, основанные на интерпретации
input. Объект, DateTimeFormatInfo возвращаемый свойством CultureInfo.DateTimeFormat , определяет символы и форматирование вinput.Объект DateTimeFormatInfo , определяющий формат данных даты и времени.
В противном formatprovidernullCultureInfo случае используется объект, соответствующий текущему языку и региональным параметрам.
Параметр 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.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, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если input параметр имеет nullзначение или не содержит допустимое строковое представление даты и времени в ожидаемом формате, определенном format и provider. Этот параметр передается неинициализирован.
Возвращаемое значение
Исключения
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.
В следующем примере для анализа массива строк, которые, как ожидается, соответствуют ISO 8601, используются различные DateTimeStyles значения. Как показано в выходных данных примера, строки, которые находятся в правильном формате, не могут анализироваться, если:
они содержат пробелы и соответствующий 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или настраиваемые описатели формата, указывающие, что смещение должно присутствовать в input, это смещение должно включать либо отрицательный знак, либо zzz положительный знак. Если знак отсутствует, операция синтаксического анализа завершается ошибкой и метод возвращается false.
Если format требуется, чтобы input содержать дату, но не время, результирующий DateTimeOffset объект назначается время полуночи (0:00:00). Если format требуется, чтобы input он содержал время, но не дату, результирующий DateTimeOffset объект назначается текущая дата в локальной системе. Если format не требуется input смещение, смещение результирующего DateTimeOffset объекта зависит от значения styles параметра. Если styles включается AssumeLocal, то для объекта назначается смещение локального часового пояса DateTimeOffset . Если styles включается AssumeUniversalсмещение "Координированное универсальное время (UTC) или +00:00, назначается объекту DateTimeOffset . Если ни значение не указано, используется смещение локального часового пояса.
Определенные символы даты и времени, используемые в input параметре formatProvider . То же самое верно для точного шаблона, если format это строка описателя стандартного input формата. Параметр formatProvider может иметь одно из следующих значений:
Объект CultureInfo , представляющий язык и региональные параметры, основанные на интерпретации
input. Объект, DateTimeFormatInfo возвращаемый свойством CultureInfo.DateTimeFormat , определяет символы и стандартные форматы, разрешенные вinput.Объект DateTimeFormatInfo , определяющий формат данных даты и времени.
В противном formatprovidernullCultureInfo случае используется объект, соответствующий текущему языку и региональным параметрам.
Параметр 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 возвращаетсяfalse, если строка, которую нужно проанализировать, TryParseExact содержит компонент часа и конструктор AM/PM, которые не находятся в соглашении. В .NET Framework 3.5 и более ранних версиях конструктор AM/PM игнорируется.