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
, или если formats
null
. Этот параметр передается неинициализирован.
Возвращаемое значение
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, определяющий формат данных даты и времени.
Если formatprovider
null
, используется объект 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, определяющий формат данных даты и времени.
Если formatprovider
null
, используется объект 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, определяющий формат данных даты и времени.
Если formatprovider
null
, используется объект 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, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр input
null
или не содержит допустимое строковое представление даты и времени в ожидаемом формате, определенном 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, определяющий формат данных даты и времени.
Если formatprovider
null
, используется объект 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 игнорируется.