DateTime.TryParse Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Преобразовывает указанное строковое представление даты и времени в его эквивалент DateTime и возвращает значение, позволяющее определить успешность преобразования.
Перегрузки
TryParse(ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles, DateTime) |
Преобразует представление даты и времени в виде диапазона в его эквивалент DateTime, используя указанную информацию о форматировании, связанную с языком и региональными параметрами, и возвращает значение, которое показывает успешность преобразования. |
TryParse(String, IFormatProvider, DateTime) |
Пытается проанализировать строку в значение. |
TryParse(ReadOnlySpan<Char>, IFormatProvider, DateTime) |
Пытается проанализировать диапазон символов в значение. |
TryParse(ReadOnlySpan<Char>, DateTime) |
Преобразовывает указанный диапазон символов даты и времени в его эквивалент DateTime и возвращает значение, позволяющее определить успешность преобразования. |
TryParse(String, DateTime) |
Преобразовывает указанное строковое представление даты и времени в его эквивалент DateTime и возвращает значение, позволяющее определить успешность преобразования. |
TryParse(String, IFormatProvider, DateTimeStyles, DateTime) |
Преобразует заданное строковое представление даты и времени в его эквивалент DateTime, используя указанную информацию о форматировании, связанную с языком и региональными параметрами, и возвращает значение, которое показывает успешность преобразования. |
Комментарии
Важно!
Эры в японских календарях основаны на периодах царствования императоров. Таким образом, ожидается наступление новой эры. Например, 1 мая 2019 года в JapaneseCalendar и JapaneseLunisolarCalendar отмечено как начало эры Рэйва. Изменение эры затрагивает все приложения, использующие эти календари. Дополнительные сведения и определение того, затронуты ли приложения, см. в статье Обработка новой эры в японском календаре в .NET. Сведения о тестировании приложений в системах Windows для обеспечения их готовности к изменению эры см. в статье Подготовка приложения к изменению японской эры. Сведения о функциях в .NET, поддерживающих календари с несколькими эрами, а также рекомендации по работе с календарями, поддерживающими несколько эпох, см. в статье Работа с эрами.
TryParse(ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles, DateTime)
Преобразует представление даты и времени в виде диапазона в его эквивалент DateTime, используя указанную информацию о форматировании, связанную с языком и региональными параметрами, и возвращает значение, которое показывает успешность преобразования.
public:
static bool TryParse(ReadOnlySpan<char> s, IFormatProvider ^ provider, System::Globalization::DateTimeStyles styles, [Runtime::InteropServices::Out] DateTime % result);
public static bool TryParse (ReadOnlySpan<char> s, IFormatProvider? provider, System.Globalization.DateTimeStyles styles, out DateTime result);
public static bool TryParse (ReadOnlySpan<char> s, IFormatProvider provider, System.Globalization.DateTimeStyles styles, out DateTime result);
static member TryParse : ReadOnlySpan<char> * IFormatProvider * System.Globalization.DateTimeStyles * DateTime -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), provider As IFormatProvider, styles As DateTimeStyles, ByRef result As DateTime) As Boolean
Параметры
- s
- ReadOnlySpan<Char>
Диапазон, содержащий символы, которые представляют преобразуемые дату и время.
- provider
- IFormatProvider
Объект, который предоставляет сведения о форматировании параметра s
в зависимости от языка и региональных параметров.
- styles
- DateTimeStyles
Побитовая комбинация значений перечисления, которая определяет, как интерпретировать проанализированную дату по отношению к текущему часовому поясу или текущей дате. Обычно указывается значение None.
- result
- DateTime
При возврате этим методом содержит DateTime значение, эквивалентное дате и времени, содержащимся в s
, если преобразование выполнено успешно, или DateTime.MinValue , если преобразование завершилось сбоем. Преобразование завершается неудачей, если значение параметра s
равно null
или пустой строке ("") или не содержит допустимого строкового представления даты и времени. Этот параметр передается неинициализированным.
Возвращаемое значение
Значение true
, если параметр s
успешно преобразован; в противном случае — значение false
.
Применяется к
TryParse(String, IFormatProvider, DateTime)
Пытается проанализировать строку в значение.
public:
static bool TryParse(System::String ^ s, IFormatProvider ^ provider, [Runtime::InteropServices::Out] DateTime % result) = IParsable<DateTime>::TryParse;
public static bool TryParse (string? s, IFormatProvider? provider, out DateTime result);
static member TryParse : string * IFormatProvider * DateTime -> bool
Public Shared Function TryParse (s As String, provider As IFormatProvider, ByRef result As DateTime) As Boolean
Параметры
- s
- String
Строка для анализа.
- provider
- IFormatProvider
Объект, предоставляющий сведения о форматировании параметра s
в зависимости от языка и региональных параметров.
- result
- DateTime
При возврате этого метода содержит результат успешного анализа s
или неопределенное значение при сбое.
Возвращаемое значение
true
Значение , если s
анализ выполнен успешно; в противном случае — значение false
.
Применяется к
TryParse(ReadOnlySpan<Char>, IFormatProvider, DateTime)
Пытается проанализировать диапазон символов в значение.
public:
static bool TryParse(ReadOnlySpan<char> s, IFormatProvider ^ provider, [Runtime::InteropServices::Out] DateTime % result) = ISpanParsable<DateTime>::TryParse;
public static bool TryParse (ReadOnlySpan<char> s, IFormatProvider? provider, out DateTime result);
static member TryParse : ReadOnlySpan<char> * IFormatProvider * DateTime -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), provider As IFormatProvider, ByRef result As DateTime) As Boolean
Параметры
- s
- ReadOnlySpan<Char>
Диапазон символов для анализа.
- provider
- IFormatProvider
Объект, предоставляющий сведения о форматировании параметра s
в зависимости от языка и региональных параметров.
- result
- DateTime
При возврате этим методом содержит результат успешного анализа s
или неопределенное значение при сбое.
Возвращаемое значение
true
Значение , если s
анализ выполнен успешно; в противном случае — значение false
.
Применяется к
TryParse(ReadOnlySpan<Char>, DateTime)
Преобразовывает указанный диапазон символов даты и времени в его эквивалент DateTime и возвращает значение, позволяющее определить успешность преобразования.
public:
static bool TryParse(ReadOnlySpan<char> s, [Runtime::InteropServices::Out] DateTime % result);
public static bool TryParse (ReadOnlySpan<char> s, out DateTime result);
static member TryParse : ReadOnlySpan<char> * DateTime -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), ByRef result As DateTime) As Boolean
Параметры
- s
- ReadOnlySpan<Char>
Строка, содержащая дату и время, которые нужно преобразовать.
- result
- DateTime
При возврате этим методом содержит DateTime значение, эквивалентное дате и времени, содержащимся в s
, если преобразование выполнено успешно, или DateTime.MinValue , если преобразование завершилось сбоем. Преобразование завершается неудачей, если значение параметра s
равно null
или пустой строке ("") или не содержит допустимого строкового представления даты и времени. Этот параметр передается неинициализированным.
Возвращаемое значение
Значение true
, если параметр s
успешно преобразован; в противном случае — значение false
.
Применяется к
TryParse(String, DateTime)
Преобразовывает указанное строковое представление даты и времени в его эквивалент DateTime и возвращает значение, позволяющее определить успешность преобразования.
public:
static bool TryParse(System::String ^ s, [Runtime::InteropServices::Out] DateTime % result);
public static bool TryParse (string s, out DateTime result);
public static bool TryParse (string? s, out DateTime result);
static member TryParse : string * DateTime -> bool
Public Shared Function TryParse (s As String, ByRef result As DateTime) As Boolean
Параметры
- s
- String
Строка, содержащая дату и время, которые нужно преобразовать.
- result
- DateTime
При возврате этим методом содержит DateTime значение, эквивалентное дате и времени, содержащимся в s
, если преобразование выполнено успешно, или DateTime.MinValue , если преобразование завершилось сбоем. Преобразование завершается неудачей, если значение параметра s
равно null
или пустой строке ("") или не содержит допустимого строкового представления даты и времени. Этот параметр передается неинициализированным.
Возвращаемое значение
Значение true
, если параметр s
успешно преобразован; в противном случае — значение false
.
Примеры
В следующем примере методу передается DateTime.TryParse(String, DateTime) несколько строк даты и времени.
using namespace System;
using namespace System::Globalization;
void main()
{
array<String^>^ dateStrings = { "05/01/2009 14:57:32.8", "2009-05-01 14:57:32.8",
"2009-05-01T14:57:32.8375298-04:00",
"5/01/2008 14:57:32.80 -07:00",
"1 May 2008 2:57:32.8 PM", "16-05-2009 1:00:32 PM",
"Fri, 15 May 2009 20:10:57 GMT" };
DateTime dateValue;
Console::WriteLine("Attempting to parse strings using {0} culture.",
CultureInfo::CurrentCulture->Name);
for each (String^ dateString in dateStrings)
{
if (DateTime::TryParse(dateString, dateValue))
Console::WriteLine(" Converted '{0}' to {1} ({2}).", dateString,
dateValue, dateValue.Kind);
else
Console::WriteLine(" Unable to parse '{0}'.", dateString);
}
}
// The example displays the following output:
// Attempting to parse strings using en-US culture.
// Converted '05/01/2009 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
// Converted '2009-05-01 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
// Converted '2009-05-01T14:57:32.8375298-04:00' to 5/1/2009 11:57:32 AM (Local).
// Converted '5/01/2008 14:57:32.80 -07:00' to 5/1/2008 2:57:32 PM (Local).
// Converted '1 May 2008 2:57:32.8 PM' to 5/1/2008 2:57:32 PM (Unspecified).
// Unable to parse '16-05-2009 1:00:32 PM'.
// Converted 'Fri, 15 May 2009 20:10:57 GMT' to 5/15/2009 1:10:57 PM (Local).
using System;
using System.Globalization;
public class Example
{
public static void Main()
{
string[] dateStrings = {"05/01/2009 14:57:32.8", "2009-05-01 14:57:32.8",
"2009-05-01T14:57:32.8375298-04:00", "5/01/2008",
"5/01/2008 14:57:32.80 -07:00",
"1 May 2008 2:57:32.8 PM", "16-05-2009 1:00:32 PM",
"Fri, 15 May 2009 20:10:57 GMT" };
DateTime dateValue;
Console.WriteLine("Attempting to parse strings using {0} culture.",
CultureInfo.CurrentCulture.Name);
foreach (string dateString in dateStrings)
{
if (DateTime.TryParse(dateString, out dateValue))
Console.WriteLine(" Converted '{0}' to {1} ({2}).", dateString,
dateValue, dateValue.Kind);
else
Console.WriteLine(" Unable to parse '{0}'.", dateString);
}
}
}
// The example displays output like the following:
// Attempting to parse strings using en-US culture.
// Converted '05/01/2009 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
// Converted '2009-05-01 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
// Converted '2009-05-01T14:57:32.8375298-04:00' to 5/1/2009 11:57:32 AM (Local).
//
// Converted '5/01/2008' to 5/1/2008 12:00:00 AM (Unspecified).
// Converted '5/01/2008 14:57:32.80 -07:00' to 5/1/2008 2:57:32 PM (Local).
// Converted '1 May 2008 2:57:32.8 PM' to 5/1/2008 2:57:32 PM (Unspecified).
// Unable to parse '16-05-2009 1:00:32 PM'.
// Converted 'Fri, 15 May 2009 20:10:57 GMT' to 5/15/2009 1:10:57 PM (Local).
open System
open System.Globalization
let dateStrings =
[ "05/01/2009 14:57:32.8"; "2009-05-01 14:57:32.8"
"2009-05-01T14:57:32.8375298-04:00"; "5/01/2008"
"5/01/2008 14:57:32.80 -07:00"
"1 May 2008 2:57:32.8 PM"; "16-05-2009 1:00:32 PM"
"Fri, 15 May 2009 20:10:57 GMT" ]
printfn $"Attempting to parse strings using {CultureInfo.CurrentCulture.Name} culture."
for dateString in dateStrings do
match DateTime.TryParse dateString with
| true, dateValue ->
printfn $" Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
| _ ->
printfn $" Unable to parse '{dateString}'."
// The example displays output like the following:
// Attempting to parse strings using en-US culture.
// Converted '05/01/2009 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
// Converted '2009-05-01 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
// Converted '2009-05-01T14:57:32.8375298-04:00' to 5/1/2009 11:57:32 AM (Local).
// Converted '5/01/2008' to 5/1/2008 12:00:00 AM (Unspecified).
// Converted '5/01/2008 14:57:32.80 -07:00' to 5/1/2008 2:57:32 PM (Local).
// Converted '1 May 2008 2:57:32.8 PM' to 5/1/2008 2:57:32 PM (Unspecified).
// Unable to parse '16-05-2009 1:00:32 PM'.
// Converted 'Fri, 15 May 2009 20:10:57 GMT' to 5/15/2009 1:10:57 PM (Local).
Imports System.Globalization
Public Module Example
Public Sub Main()
Dim dateStrings() As String = {"05/01/2009 14:57:32.8", "2009-05-01 14:57:32.8",
"2009-05-01T14:57:32.8375298-04:00", "5/01/2008",
"5/01/2008 14:57:32.80 -07:00",
"1 May 2008 2:57:32.8 PM", "16-05-2009 1:00:32 PM",
"Fri, 15 May 2009 20:10:57 GMT"}
Dim dateValue As Date
Console.WriteLine("Attempting to parse strings using {0} culture.", _
CultureInfo.CurrentCulture.Name)
For Each dateString As String In dateStrings
If Date.TryParse(dateString, dateValue) Then
Console.WriteLine(" Converted '{0}' to {1} ({2}).", dateString, _
dateValue, dateValue.Kind)
Else
Console.WriteLine(" Unable to parse '{0}'.", dateString)
End If
Next
End Sub
End Module
' The example displays output like the following:
' Attempting to parse strings using en-US culture.
' Converted '05/01/2009 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
' Converted '2009-05-01 14:57:32.8' to 5/1/2009 2:57:32 PM (Unspecified).
' Converted '2009-05-01T14:57:32.8375298-04:00' to 5/1/2009 11:57:32 AM (Local).
'
' Converted '5/01/2008' to 5/1/2008 12:00:00 AM (Unspecified).
' Converted '5/01/2008 14:57:32.80 -07:00' to 5/1/2008 2:57:32 PM (Local).
' Converted '1 May 2008 2:57:32.8 PM' to 5/1/2008 2:57:32 PM (Unspecified).
' Unable to parse '16-05-2009 1:00:32 PM'.
' Converted 'Fri, 15 May 2009 20:10:57 GMT' to 5/15/2009 1:10:57 PM (Local).
Комментарии
Метод DateTime.TryParse(String, DateTime) аналогичен методу DateTime.Parse(String) , за исключением того, что TryParse(String, DateTime) метод не создает исключение в случае сбоя преобразования.
Строка s
анализируется с помощью сведений о форматировании в текущем DateTimeFormatInfo объекте, который неявно предоставляется текущим языком и региональными параметрами.
Этот метод пытается игнорировать нераспознанные данные, если это возможно, и заполняет отсутствующие сведения о месяце, дне и году текущей датой. Если s
содержит только дату и время, этот метод предполагает, что время равно 12:00 полуночи. Если s
включает компонент даты с двузначным годом, он преобразуется в год в текущем календаре текущего Calendar.TwoDigitYearMax языка и региональных параметров на основе значения свойства . Любой начальный, внутренний или конечный пробел в s
игнорируется. Дата и время могут быть заключены в квадратные скобки с помощью пары начальных и конечных символов NUMBER SIGN ('#', U+0023), а также с одним или несколькими символами NULL (U+0000).
DateTime.TryParse(String, DateTime) Так как метод пытается проанализировать строковое представление даты и времени с помощью правил форматирования текущего языка и региональных параметров, попытка проанализировать определенную строку в разных языках и региональных параметрах может завершиться ошибкой или возвратить разные результаты. Если определенный формат даты и времени будет анализироваться в разных языковых стандартах, используйте DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) метод или одну из перегрузок TryParseExact метода и укажите описатель формата.
Если s
является строковым представлением високосного дня в високосном году в текущем календаре, метод успешно анализируется s
. Если s
является строковым представлением високосного дня не високосного года в текущем календаре текущего языка и региональных параметров, операция синтаксического анализа завершается сбоем и метод возвращает false
.
Если s
не содержит сведений о часовом DateTime поясе, содержит значение, result
свойство которого Kind равно DateTimeKind.Unspecified при возврате методом. Если анализируемая строка содержит сведения о часовом поясе, содержит значение, result
свойство которого Kind равно DateTimeKind.Local при возврате методом.DateTime
Примечания для тех, кто вызывает этот метод
На форматирование влияют свойства текущего DateTimeFormatInfo объекта, которые по умолчанию являются производными от элемента "Региональные и языковые параметры" в панель управления. Метод TryParse может неожиданно завершиться ошибкой и возвращать его False
, если для свойств current DateSeparator и TimeSeparator задано одно и то же значение.
См. также раздел
- Parse
- CultureInfo
- DateTimeFormatInfo
- Анализ строк даты и времени в .NET Framework
- Строки стандартных форматов даты и времени
- Строки настраиваемых форматов даты и времени
- Пример: служебная программа форматирования .NET Core WinForms (C#)
- Пример: служебная программа форматирования .NET Core WinForms (Visual Basic)
Применяется к
TryParse(String, IFormatProvider, DateTimeStyles, DateTime)
Преобразует заданное строковое представление даты и времени в его эквивалент DateTime, используя указанную информацию о форматировании, связанную с языком и региональными параметрами, и возвращает значение, которое показывает успешность преобразования.
public:
static bool TryParse(System::String ^ s, IFormatProvider ^ provider, System::Globalization::DateTimeStyles styles, [Runtime::InteropServices::Out] DateTime % result);
public static bool TryParse (string s, IFormatProvider provider, System.Globalization.DateTimeStyles styles, out DateTime result);
public static bool TryParse (string? s, IFormatProvider? provider, System.Globalization.DateTimeStyles styles, out DateTime result);
static member TryParse : string * IFormatProvider * System.Globalization.DateTimeStyles * DateTime -> bool
Public Shared Function TryParse (s As String, provider As IFormatProvider, styles As DateTimeStyles, ByRef result As DateTime) As Boolean
Параметры
- s
- String
Строка, содержащая дату и время, которые нужно преобразовать.
- provider
- IFormatProvider
Объект, который предоставляет сведения о форматировании параметра s
в зависимости от языка и региональных параметров.
- styles
- DateTimeStyles
Побитовая комбинация значений перечисления, которая определяет, как интерпретировать проанализированную дату по отношению к текущему часовому поясу или текущей дате. Обычно указывается значение None.
- result
- DateTime
При возврате этим методом содержит DateTime значение, эквивалентное дате и времени, содержащимся в s
, если преобразование выполнено успешно, или DateTime.MinValue , если преобразование завершилось сбоем. Преобразование завершается неудачей, если значение параметра s
равно null
или пустой строке ("") или не содержит допустимого строкового представления даты и времени. Этот параметр передается неинициализированным.
Возвращаемое значение
Значение true
, если параметр s
успешно преобразован; в противном случае — значение false
.
Исключения
styles
не является допустимым значением DateTimeStyles.
-или-
styles
содержит недопустимое сочетание значений DateTimeStyles (например, и AssumeLocal, и AssumeUniversal ).
provider
является нейтральным языком и региональными параметрами и не может использоваться в операции анализа.
Примеры
В следующем примере показан DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) метод .
using System;
using System.Globalization;
public class Example
{
public static void Main()
{
string dateString;
CultureInfo culture;
DateTimeStyles styles;
DateTime dateResult;
// Parse a date and time with no styles.
dateString = "03/01/2009 10:00 AM";
culture = CultureInfo.CreateSpecificCulture("en-US");
styles = DateTimeStyles.None;
if (DateTime.TryParse(dateString, culture, styles, out dateResult))
Console.WriteLine("{0} converted to {1} {2}.",
dateString, dateResult, dateResult.Kind);
else
Console.WriteLine("Unable to convert {0} to a date and time.",
dateString);
// Parse the same date and time with the AssumeLocal style.
styles = DateTimeStyles.AssumeLocal;
if (DateTime.TryParse(dateString, culture, styles, out dateResult))
Console.WriteLine("{0} converted to {1} {2}.",
dateString, dateResult, dateResult.Kind);
else
Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
// Parse a date and time that is assumed to be local.
// This time is five hours behind UTC. The local system's time zone is
// eight hours behind UTC.
dateString = "2009/03/01T10:00:00-5:00";
styles = DateTimeStyles.AssumeLocal;
if (DateTime.TryParse(dateString, culture, styles, out dateResult))
Console.WriteLine("{0} converted to {1} {2}.",
dateString, dateResult, dateResult.Kind);
else
Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
// Attempt to convert a string in improper ISO 8601 format.
dateString = "03/01/2009T10:00:00-5:00";
if (DateTime.TryParse(dateString, culture, styles, out dateResult))
Console.WriteLine("{0} converted to {1} {2}.",
dateString, dateResult, dateResult.Kind);
else
Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
// Assume a date and time string formatted for the fr-FR culture is the local
// time and convert it to UTC.
dateString = "2008-03-01 10:00";
culture = CultureInfo.CreateSpecificCulture("fr-FR");
styles = DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeLocal;
if (DateTime.TryParse(dateString, culture, styles, out dateResult))
Console.WriteLine("{0} converted to {1} {2}.",
dateString, dateResult, dateResult.Kind);
else
Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
}
}
// The example displays the following output to the console:
// 03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Unspecified.
// 03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Local.
// 2009/03/01T10:00:00-5:00 converted to 3/1/2009 7:00:00 AM Local.
// Unable to convert 03/01/2009T10:00:00-5:00 to a date and time.
// 2008-03-01 10:00 converted to 3/1/2008 6:00:00 PM Utc.
open System
open System.Globalization
[<EntryPoint>]
let main _ =
// Parse a date and time with no styles.
let dateString = "03/01/2009 10:00 AM"
let culture = CultureInfo.CreateSpecificCulture "en-US"
let styles = DateTimeStyles.None
match DateTime.TryParse(dateString, culture, styles) with
| true, dateResult ->
printfn $"{dateString} converted to {dateResult} {dateResult.Kind}."
| _ ->
printfn $"Unable to convert {dateString} to a date and time."
// Parse the same date and time with the AssumeLocal style.
let styles = DateTimeStyles.AssumeLocal
match DateTime.TryParse(dateString, culture, styles) with
| true, dateResult ->
printfn $"{dateString} converted to {dateResult} {dateResult.Kind}."
| _ ->
printfn $"Unable to convert {dateString} to a date and time."
// Parse a date and time that is assumed to be local.
// This time is five hours behind UTC. The local system's time zone is
// eight hours behind UTC.
let dateString = "2009/03/01T10:00:00-5:00"
let styles = DateTimeStyles.AssumeLocal
match DateTime.TryParse(dateString, culture, styles) with
| true, dateResult ->
printfn $"{dateString} converted to {dateResult} {dateResult.Kind}."
| _ ->
printfn $"Unable to convert {dateString} to a date and time."
// Attempt to convert a string in improper ISO 8601 format.
let dateString = "03/01/2009T10:00:00-5:00"
match DateTime.TryParse(dateString, culture, styles) with
| true, dateResult ->
printfn $"{dateString} converted to {dateResult} {dateResult.Kind}."
| _ ->
printfn $"Unable to convert {dateString} to a date and time."
// Assume a date and time string formatted for the fr-FR culture is the local
// time and convert it to UTC.
let dateString = "2008-03-01 10:00"
let culture = CultureInfo.CreateSpecificCulture "fr-FR"
let styles = DateTimeStyles.AdjustToUniversal ||| DateTimeStyles.AssumeLocal
match DateTime.TryParse(dateString, culture, styles) with
| true, dateResult ->
printfn $"{dateString} converted to {dateResult} {dateResult.Kind}."
| _ ->
printfn $"Unable to convert {dateString} to a date and time."
0
// The example displays the following output to the console:
// 03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Unspecified.
// 03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Local.
// 2009/03/01T10:00:00-5:00 converted to 3/1/2009 7:00:00 AM Local.
// Unable to convert 03/01/2009T10:00:00-5:00 to a date and time.
// 2008-03-01 10:00 converted to 3/1/2008 6:00:00 PM Utc.
Imports System.Globalization
Public Module Example
Public Sub Main()
Dim dateString As String
Dim culture As CultureInfo
Dim styles As DateTimeStyles
Dim dateResult As DateTime
' Parse a date and time with no styles.
dateString = "03/01/2009 10:00 AM"
culture = CultureInfo.CreateSpecificCulture("en-US")
styles = DateTimeStyles.None
If DateTime.TryParse(dateString, culture, styles, dateResult) Then
Console.WriteLine("{0} converted to {1} {2}.", _
dateString, dateResult, dateResult.Kind)
Else
Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
End If
' Parse the same date and time with the AssumeLocal style.
styles = DateTimeStyles.AssumeLocal
If DateTime.TryParse(dateString, culture, styles, dateResult)
Console.WriteLine("{0} converted to {1} {2}.", _
dateString, dateResult, dateResult.Kind)
Else
Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
End If
' Parse a date and time that is assumed to be local.
' This time is five hours behind UTC. The local system's time zone is
' eight hours behind UTC.
dateString = "2009/03/01T10:00:00-5:00"
styles = DateTimeStyles.AssumeLocal
If DateTime.TryParse(dateString, culture, styles, dateResult)
Console.WriteLine("{0} converted to {1} {2}.", _
dateString, dateResult, dateResult.Kind)
Else
Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
End If
' Attempt to convert a string in improper ISO 8601 format.
dateString = "03/01/2009T10:00:00-5:00"
If DateTime.TryParse(dateString, culture, styles, dateResult)
Console.WriteLine("{0} converted to {1} {2}.", _
dateString, dateResult, dateResult.Kind)
Else
Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
End If
' Assume a date and time string formatted for the fr-FR culture is the local
' time and convert it to UTC.
dateString = "2008-03-01 10:00"
culture = CultureInfo.CreateSpecificCulture("fr-FR")
styles = DateTimeStyles.AdjustToUniversal Or DateTimeStyles.AssumeLocal
If DateTime.TryParse(dateString, culture, styles, dateResult)
Console.WriteLine("{0} converted to {1} {2}.", _
dateString, dateResult, dateResult.Kind)
Else
Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
End If
End Sub
End Module
' The example displays the following output to the console:
' 03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Unspecified.
' 03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Local.
' 2009/03/01T10:00:00-5:00 converted to 3/1/2009 7:00:00 AM Local.
' Unable to convert 03/01/2009T10:00:00-5:00 to a date and time.
' 2008-03-01 10:00 converted to 3/1/2008 6:00:00 PM Utc.
Комментарии
Метод DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) анализирует строку, которая может содержать сведения о дате, времени и часовом поясе. Он аналогичен методу DateTime.Parse(String, IFormatProvider, DateTimeStyles) , за исключением того, что DateTime.TryParse(String, DateTime) метод не создает исключение в случае сбоя преобразования.
Этот метод пытается пропустить нераспознанные данные и полностью проанализировать s
. Если s
содержит время, но нет даты, метод по умолчанию заменяет текущую дату или, если styles
включает NoCurrentDateDefault флаг, он заменяет DateTime.Date.MinValue
. Если s
содержит дату, но не время, в качестве времени по умолчанию используется 12:00 полночь. Если дата присутствует, но ее компонент года состоит только из двух цифр, она преобразуется в год в provider
текущем календаре параметра на основе значения Calendar.TwoDigitYearMax свойства . Все начальные, внутренние или конечные пробелы в s
игнорируются. Дата и время могут быть заключены в квадратные скобки с помощью пары начальных и конечных символов NUMBER SIGN ('#', U+0023), а также с одним или несколькими символами NULL (U+0000).
Определенные допустимые форматы для элементов даты и времени, а также имена и символы, используемые в датах и времени, определяются параметром provider
, который может быть любым из следующих:
Объект CultureInfo , представляющий язык и региональные параметры, форматирование которого используется в параметре
s
. Объект DateTimeFormatInfo , возвращаемый свойством , CultureInfo.DateTimeFormat определяет форматирование, используемое вs
.Объект DateTimeFormatInfo , определяющий форматирование, используемое в
s
.Пользовательская реализация интерфейса IFormatProvider. Его IFormatProvider.GetFormat метод возвращает DateTimeFormatInfo объект , который определяет форматирование, используемое в
s
.
Если значением параметра provider
является null
, используется текущий язык и региональные параметры.
Если s
является строковым представлением високосного дня в високосном году в текущем календаре, метод успешно анализируется s
. Если s
является строковым представлением високосного дня в високосном году в текущем календаре provider
, операция синтаксического анализа завершается ошибкой и метод возвращает false
.
Параметр styles
определяет точную интерпретацию проанализированной строки и способ ее обработки операцией синтаксического анализа. Это может быть один или несколько элементов перечисления DateTimeStyles , как описано в следующей таблице.
Элемент DateTimeStyles | Описание |
---|---|
AdjustToUniversal | s Анализирует и при необходимости преобразует его в формат UTC. Если s включает смещение часового пояса или не s содержит сведений о часовом поясе, но styles включает DateTimeStyles.AssumeLocal флаг, метод анализирует строку, вызывает ToUniversalTime для преобразования возвращаемого DateTime значения в формат UTC и задает Kind свойству значение DateTimeKind.Utc. Если s указывает, что он представляет собой формат UTC или s не содержит сведения о часовом поясе, но styles включает DateTimeStyles.AssumeUniversal флаг, метод анализирует строку, не выполняет преобразование часового пояса для возвращаемого DateTime значения и задает свойству значение KindDateTimeKind.Utc. Во всех остальных случаях флаг не действует. |
AllowInnerWhite | Хотя это значение является допустимым, оно игнорируется. Внутренние пробелы разрешены в элементах s даты и времени . |
AllowLeadingWhite | Хотя это значение является допустимым, оно игнорируется. Пробелы в начале разрешены в элементах даты и времени .s |
AllowTrailingWhite | Хотя это значение является допустимым, оно игнорируется. Пробелы в конце разрешены в элементах s даты и времени . |
AllowWhiteSpaces | Указывает, что s может содержать начальные, внутренние и конечные пробелы. Это поведение по умолчанию. Его нельзя переопределить, указав более строгое DateTimeStyles значение перечисления, DateTimeStyles.Noneнапример . |
AssumeLocal | Указывает, что при s отсутствии сведений о часовом поясе предполагается, что он представляет местное время. Если DateTimeStyles.AdjustToUniversal флаг отсутствует, свойству Kind возвращаемого DateTime значения присваивается значение DateTimeKind.Local. |
AssumeUniversal | Указывает, что если s отсутствует какая-либо информация о часовом поясе, предполагается, что он представляет собой формат UTC. Если DateTimeStyles.AdjustToUniversal флаг отсутствует, метод преобразует возвращаемое DateTime значение из UTC в местное время и задает свойству Kind значение DateTimeKind.Local. |
None | Хотя это значение является допустимым, оно игнорируется. |
RoundtripKind | Для строк, содержащих сведения о часовом поясе, пытается предотвратить преобразование строки даты и времени в значение со свойством DateTime , равным DateTimeKind.Local.Kind Как правило, такая строка создается путем вызова DateTime.ToString(String) метода с помощью описателей стандартного формата "o", "r" или "u". |
Если s
не содержит сведений о часовом поясе DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) , метод возвращает DateTime значение, свойство которого Kind равно , DateTimeKind.Unspecified если styles
флаг не указывает на иное. Если s
включает сведения о часовом поясе или смещение часового пояса DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) , метод выполняет любое необходимое преобразование времени и возвращает одно из следующих значений:
Значение DateTime , дата и время которого отражают местное время и свойство которого Kind имеет значение DateTimeKind.Local.
Или, если
styles
включает AdjustToUniversal флаг, значение, DateTime дата и время которого отражают время в формате UTC и свойство которого Kind имеет значение DateTimeKind.Utc.
Это поведение можно переопределить с помощью флага DateTimeStyles.RoundtripKind .
Анализ пользовательских языков и региональных параметров
При анализе строки даты и времени, созданной для пользовательского языка и региональных параметров, используйте TryParseExact метод вместо TryParse метода , чтобы повысить вероятность успешного выполнения операции синтаксического анализа. Настраиваемые строки даты и времени могут быть сложными и сложными для анализа. Метод TryParse пытается проанализировать строку с несколькими неявными шаблонами синтаксического анализа, которые могут завершиться ошибкой. Напротив, TryParseExact метод требует явно назначить один или несколько точных шаблонов синтаксического анализа, которые, скорее всего, будут успешными.
Дополнительные сведения о пользовательских языках и региональных параметрах см. в System.Globalization.CultureAndRegionInfoBuilder разделе Класс .
Примечания для тех, кто вызывает этот метод
Форматирование зависит от свойств текущего DateTimeFormatInfo объекта, который предоставляется параметром provider
. Метод TryParse может неожиданно завершиться ошибкой и возвращать его False
, если для свойств current DateSeparator и TimeSeparator задано одно и то же значение.
См. также раздел
- Parse
- CultureInfo
- DateTimeFormatInfo
- Анализ строк даты и времени в .NET Framework
- Строки стандартных форматов даты и времени
- Строки настраиваемых форматов даты и времени