DateTime.TryParseExact 方法

定义

将日期和时间的指定字符串表示形式转换为其等效的 DateTimeConverts the specified string representation of a date and time to its DateTime equivalent. 字符串表示形式的格式必须与指定的格式完全匹配。The format of the string representation must match a specified format exactly. 该方法返回一个指示转换是否成功的值。The method returns a value that indicates whether the conversion succeeded.

重载

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

使用指定的格式、区域性特定的格式信息和样式将日期和时间的指定范围表示形式转换为其等效的 DateTimeConverts the specified span representation of a date and time to its DateTime equivalent using the specified format, culture-specific format information, and style. 字符串表示形式的格式必须与指定的格式完全匹配。The format of the string representation must match the specified format exactly. 该方法返回一个指示转换是否成功的值。The method returns a value that indicates whether the conversion succeeded.

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

将日期和时间的指定字符范围转换为其等效的 DateTime,并返回一个指示转换是否成功的值。Converts the specified char span of a date and time to its DateTime equivalent and returns a value that indicates whether the conversion succeeded.

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

使用指定的格式、区域性特定的格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTimeConverts the specified string representation of a date and time to its DateTime equivalent using the specified format, culture-specific format information, and style. 字符串表示形式的格式必须与指定的格式完全匹配。The format of the string representation must match the specified format exactly. 该方法返回一个指示转换是否成功的值。The method returns a value that indicates whether the conversion succeeded.

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

使用指定的格式数组、区域性特定格式信息和样式,将日期和时间的指定字符串表示形式转换为其等效的 DateTimeConverts the specified string representation of a date and time to its DateTime equivalent using the specified array of formats, culture-specific format information, and style. 字符串表示形式的格式必须至少与指定的格式之一完全匹配。The format of the string representation must match at least one of the specified formats exactly. 该方法返回一个指示转换是否成功的值。The method returns a value that indicates whether the conversion succeeded.

注解

重要

日本历法中的年号是根据天皇统治来命名的,因此预计会发生变化。Eras in the Japanese calendars are based on the emperor's reign and are therefore expected to change. 例如,2019 年 5 月 1 日在 JapaneseCalendarJapaneseLunisolarCalendar 中标志着令和年号的开始。For example, May 1, 2019 marked the beginning of the Reiwa era in the JapaneseCalendar and JapaneseLunisolarCalendar. 这种年号的变化会影响使用这些日历的所有应用程序。Such a change of era affects all applications that use these calendars. 请参阅 Handling a new era in the Japanese calendar in .NET(使用 .NET 处理日语日历中的新元号),了解详细信息并确定是否会影响你的应用程序。See Handling a new era in the Japanese calendar in .NET for more information and to determine whether your applications are affected. 请参阅针对日语元号更改准备应用程序,了解有关在 Windows 系统上测试应用程序以确保针对元号更改的准备情况信息。See Prepare your application for the Japanese era change for information on testing your applications on Windows systems to ensure their readiness for the era change. 有关 .Net 中支持多个年号日历的功能,以及在使用支持多个年号的日历时的最佳做法,请参阅使用年号See Working with eras for features in .NET that support calendars with multiple eras and for best practices when working with calendars that support multiple eras.

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

使用指定的格式、区域性特定的格式信息和样式将日期和时间的指定范围表示形式转换为其等效的 DateTimeConverts the specified span representation of a date and time to its DateTime equivalent using the specified format, culture-specific format information, and style. 字符串表示形式的格式必须与指定的格式完全匹配。The format of the string representation must match the specified format exactly. 该方法返回一个指示转换是否成功的值。The method returns a value that indicates whether the conversion succeeded.

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

参数

s
ReadOnlySpan<Char>

一个范围,包含表示要转换的日期和时间的字符。A span containing the characters representing a date and time to convert.

format
ReadOnlySpan<Char>

所需的 s 格式。The required format of s.

provider
IFormatProvider

一个对象,提供有关 s 的区域性特定格式设置信息。An object that supplies culture-specific formatting information about s.

style
DateTimeStyles

一个或多个枚举值的按位组合,指示 s 允许使用的格式。A bitwise combination of one or more enumeration values that indicate the permitted format of s.

result
DateTime

当此方法返回时,如果转换成功,则包含与 DateTime 中包含的日期和时间等效的 s 值;如果转换失败,则为 MinValueWhen this method returns, contains the DateTime value equivalent to the date and time contained in s, if the conversion succeeded, or MinValue if the conversion failed. 如果 sformat 参数为 null,或者为空字符串,或者未包含对应于 format 中指定的模式的日期和时间,则转换失败。The conversion fails if either the s or format parameter is null, is an empty string, or does not contain a date and time that correspond to the pattern specified in format. 此参数未经初始化即被传递。This parameter is passed uninitialized.

返回

如果 true 成功转换,则为 s;否则为 falsetrue if s was converted successfully; otherwise, false.

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

将日期和时间的指定字符范围转换为其等效的 DateTime,并返回一个指示转换是否成功的值。Converts the specified char span of a date and time to its DateTime equivalent and returns a value that indicates whether the conversion succeeded.

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

参数

s
ReadOnlySpan<Char>

一个范围,包含要分析的字符串。The span containing the string to parse.

formats
String[]

s 的允许格式的数组。An array of allowable formats of s.

provider
IFormatProvider

一个对象,提供有关 s 的区域性特定格式设置信息。An object that supplies culture-specific formatting information about s.

style
DateTimeStyles

枚举值的按位组合,该组合定义如何根据当前时区或当前日期解释已分析日期。A bitwise combination of enumeration values that defines how to interpret the parsed date in relation to the current time zone or the current date. 要指定的一个典型值为 NoneA typical value to specify is None.

result
DateTime

当此方法返回时,如果转换成功,则包含与 DateTime 中包含的日期和时间等效的 s 值;如果转换失败,则为 MinValueWhen this method returns, contains the DateTime value equivalent to the date and time contained in s, if the conversion succeeded, or MinValue if the conversion failed. 如果 s 参数为 null,为 Empty,或者不包含日期和时间的有效字符串表示形式,则转换失败。The conversion fails if the s parameter is null, is Empty, or does not contain a valid string representation of a date and time. 此参数未经初始化即被传递。This parameter is passed uninitialized.

返回

如果 true 参数成功转换,则为 s;否则为 falsetrue if the s parameter was converted successfully; otherwise, false.

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

使用指定的格式、区域性特定的格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTimeConverts the specified string representation of a date and time to its DateTime equivalent using the specified format, culture-specific format information, and style. 字符串表示形式的格式必须与指定的格式完全匹配。The format of the string representation must match the specified format exactly. 该方法返回一个指示转换是否成功的值。The method returns a value that indicates whether the conversion succeeded.

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

参数

s
String

包含要转换的日期和时间的字符串。A string containing a date and time to convert.

format
String

所需的 s 格式。The required format of s.

provider
IFormatProvider

一个对象,提供有关 s 的区域性特定格式设置信息。An object that supplies culture-specific formatting information about s.

style
DateTimeStyles

一个或多个枚举值的按位组合,指示 s 允许使用的格式。A bitwise combination of one or more enumeration values that indicate the permitted format of s.

result
DateTime

当此方法返回时,如果转换成功,则包含与 DateTime 中包含的日期和时间等效的 s 值;如果转换失败,则为 MinValueWhen this method returns, contains the DateTime value equivalent to the date and time contained in s, if the conversion succeeded, or MinValue if the conversion failed. 如果 sformat 参数为 null,或者为空字符串,或者未包含对应于 format 中指定的模式的日期和时间,则转换失败。The conversion fails if either the s or format parameter is null, is an empty string, or does not contain a date and time that correspond to the pattern specified in format. 此参数未经初始化即被传递。This parameter is passed uninitialized.

返回

如果 true 成功转换,则为 s;否则为 falsetrue if s was converted successfully; otherwise, false.

异常

styles 不是有效的 DateTimeStyles 值。styles is not a valid DateTimeStyles value.

- 或 --or- styles 包含无效的 DateTimeStyles 值组合(例如,AssumeLocalAssumeUniversal)。styles contains an invalid combination of DateTimeStyles values (for example, both AssumeLocal and AssumeUniversal).

示例

下面的示例演示 DateTime.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) 方法。The following example demonstrates the DateTime.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) method. 请注意,如果 styles 参数等于 DateTimeStyles.None,则无法成功分析字符串 "5/01/2009 8:30 AM",因为 format不允许使用前导空格。Note that the string " 5/01/2009 8:30 AM" cannot be parsed successfully when the styles parameter equals DateTimeStyles.None because leading spaces are not allowed by format. 此外,不能使用 format "MM/dd/yyyyhh: MM" 成功分析字符串 "5/01/2009 09:00",因为日期字符串不会在月份号之前带有前导零,如 format 需要。Additionally, the string "5/01/2009 09:00" cannot be parsed successfully with a format of "MM/dd/yyyyhh:mm" because the date string does not precede the month number with a leading zero, as format requires.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo enUS = new CultureInfo("en-US"); 
      string dateString;
      DateTime dateValue;
      
      // Parse date with no style flags.
      dateString = " 5/01/2009 8:30 AM";
      if (DateTime.TryParseExact(dateString, "g", enUS, 
                                 DateTimeStyles.None, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, 
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

      // Allow a leading space in the date string.
      if (DateTime.TryParseExact(dateString, "g", enUS, 
                                 DateTimeStyles.AllowLeadingWhite, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, 
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
      
      // Use custom formats with M and MM.
      dateString = "5/01/2009 09:00";
      if (DateTime.TryParseExact(dateString, "M/dd/yyyy hh:mm", enUS, 
                                 DateTimeStyles.None, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, 
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

      // Allow a leading space in the date string.
      if (DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, 
                              DateTimeStyles.None, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, 
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

      // Parse a string with time zone information.
      dateString = "05/01/2009 01:30:42 PM -05:00"; 
      if (DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, 
                              DateTimeStyles.None, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, 
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

      // Allow a leading space in the date string.
      if (DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, 
                              DateTimeStyles.AdjustToUniversal, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, 
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
           
      // Parse a string representing UTC.
      dateString = "2008-06-11T16:11:20.0904778Z";
      if (DateTime.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, 
                                     DateTimeStyles.None, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, 
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

      if (DateTime.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, 
                                 DateTimeStyles.RoundtripKind, out dateValue))
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, 
                           dateValue.Kind);
      else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString);
   }
}
// The example displays the following output:
//    ' 5/01/2009 8:30 AM' is not in an acceptable format.
//    Converted ' 5/01/2009 8:30 AM' to 5/1/2009 8:30:00 AM (Unspecified).
//    Converted '5/01/2009 09:00' to 5/1/2009 9:00:00 AM (Unspecified).
//    '5/01/2009 09:00' is not in an acceptable format.
//    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 11:30:42 AM (Local).
//    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 6:30:42 PM (Utc).
//    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 9:11:20 AM (Local).
//    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 4:11:20 PM (Utc).
Imports System.Globalization

Public Module Example
   Public Sub Main()
      Dim enUS As New CultureInfo("en-US") 
      Dim dateString As String
      Dim dateValue As Date
      
      ' Parse date with no style flags.
      dateString = " 5/01/2009 8:30 AM"
      If Date.TryParseExact(dateString, "g", enUS, _
                            DateTimeStyles.None, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
      ' Allow a leading space in the date string.
      If Date.TryParseExact(dateString, "g", enUS, _
                            DateTimeStyles.AllowLeadingWhite, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
      
      ' Use custom formats with M and MM.
      dateString = "5/01/2009 09:00"
      If Date.TryParseExact(dateString, "M/dd/yyyy hh:mm", enUS, _
                            DateTimeStyles.None, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
      ' Allow a leading space in the date string.
      If Date.TryParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, _
                            DateTimeStyles.None, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If

      ' Parse a string with time zone information.
      dateString = "05/01/2009 01:30:42 PM -05:00" 
      If Date.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, _
                            DateTimeStyles.None, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
      ' Allow a leading space in the date string.
      If Date.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, _
                            DateTimeStyles.AdjustToUniversal, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
           
      ' Parse a string representing UTC.
      dateString = "2008-06-11T16:11:20.0904778Z"
      If Date.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, _
                                     DateTimeStyles.None, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
      
      If Date.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, _
                            DateTimeStyles.RoundtripKind, dateValue) Then
         Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, _
                           dateValue.Kind)
      Else
         Console.WriteLine("'{0}' is not in an acceptable format.", dateString)
      End If
   End Sub
End Module
' The example displays the following output:
'    ' 5/01/2009 8:30 AM' is not in an acceptable format.
'    Converted ' 5/01/2009 8:30 AM' to 5/1/2009 8:30:00 AM (Unspecified).
'    Converted '5/01/2009 09:00' to 5/1/2009 9:00:00 AM (Unspecified).
'    '5/01/2009 09:00' is not in an acceptable format.
'    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 11:30:42 AM (Local).
'    Converted '05/01/2009 01:30:42 PM -05:00' to 5/1/2009 6:30:42 PM (Utc).
'    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 9:11:20 AM (Local).
'    Converted '2008-06-11T16:11:20.0904778Z' to 6/11/2008 4:11:20 PM (Utc).

注解

DateTime.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) 方法分析日期的字符串表示形式,该日期必须采用 format 参数定义的格式。The DateTime.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) method parses the string representation of a date, which must be in the format defined by the format parameter. 它类似于 DateTime.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法,但如果转换失败,则 TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) 方法不会引发异常。It is similar to the DateTime.ParseExact(String, String, IFormatProvider, DateTimeStyles) method, except that the TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) method does not throw an exception if the conversion fails.

s 参数包含要分析的日期和时间,并且必须采用 format 参数定义的格式。The s parameter contains the date and time to parse and must be in a format defined by the format parameter. 如果 s中存在日期、时间和时区元素,则它们也必须按 format指定的顺序出现。If date, time, and time zone elements are present in s, they must also appear in the order specified by format. 如果 format 定义无时间元素的日期并且分析操作成功,则生成的 DateTime 值的时间为午夜(00:00:00)。If format defines a date with no time element and the parse operation succeeds, the resulting DateTime value has a time of midnight (00:00:00). 如果 format 定义了一个没有日期元素的时间并且分析操作成功,则默认情况下生成的 DateTime 值的日期为 DateTime.Now.Date,或者,如果 styles 包含 DateTimeStyles.NoCurrentDateDefault 标志,则其日期为 DateTime.MinValue.DateIf format defines a time with no date element and the parse operation succeeds, the resulting DateTime value by default has a date of DateTime.Now.Date, or it has a date of DateTime.MinValue.Date if styles includes the DateTimeStyles.NoCurrentDateDefault flag. style 参数确定 s 参数是否可以包含前导空白字符和尾随空格字符。The style parameter determines whether the s parameter can contain leading, inner, or trailing white space characters.

如果 s 不包含时区信息,则 DateTimeKind.Unspecified返回的 DateTime 对象的 Kind 属性。If s contains no time zone information, the Kind property of the returned DateTime object is DateTimeKind.Unspecified. 此行为可以通过使用 DateTimeStyles.AssumeLocal 标志来更改,该标志返回 Kind 属性 DateTimeKind.LocalDateTime 值,或者使用 DateTimeStyles.AssumeUniversalDateTimeStyles.AdjustToUniversal 标志,该标志返回 DateTime 属性 KindDateTimeKind.Utc值。This behavior can be changed by using the DateTimeStyles.AssumeLocal flag, which returns a DateTime value whose Kind property is DateTimeKind.Local, or by using the DateTimeStyles.AssumeUniversal and DateTimeStyles.AdjustToUniversal flags, which returns a DateTime value whose Kind property is DateTimeKind.Utc. 如果包含时区信息,则时间将转换为本地时间(如有必要),并将返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind.LocalIf s contains time zone information, the time is converted to local time, if necessary, and the Kind property of the returned DateTime object is set to DateTimeKind.Local. 可以通过使用 DateTimeStyles.RoundtripKind 标志来更改此行为,以便不将协调世界时(UTC)转换为本地时间,并将 Kind 属性设置为 DateTimeKind.UtcThis behavior can be changed by using the DateTimeStyles.RoundtripKind flag to not convert Coordinated Universal Time (UTC) to a local time and set the Kind property to DateTimeKind.Utc.

format 参数包含一种模式,该模式对应于 s 参数所需的格式。The format parameter contains a pattern that corresponds to the expected format of the s parameter. format 参数中的模式包括自定义日期和时间格式字符串表中的一个或多个自定义格式说明符,或从标准日期和时间格式字符串表中标识预定义模式的单个标准格式说明符。The pattern in the format parameter consists of one or more custom format specifiers from the Custom Date and Time Format Strings table, or a single standard format specifier, which identifies a predefined pattern, from the Standard Date and Time Format Strings table.

如果在自定义格式模式下不使用日期或时间分隔符,请为 provider 参数使用固定区域性,并为每个自定义格式说明符使用最宽形式。If you do not use date or time separators in a custom format pattern, use the invariant culture for the provider parameter and the widest form of each custom format specifier. 例如,如果想要在模式中指定小时数,请指定更宽的形式 "HH",而不是 "H"。For example, if you want to specify hours in the pattern, specify the wider form, "HH", instead of the narrower form, "H".

备注

您可以调用 DateTime.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) 方法并指定多个允许的格式,而不要求 s 符合一种格式以便分析操作成功。Rather than requiring that s conform to a single format for the parse operation to succeed, you can call the DateTime.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) method and specify multiple permitted formats. 这使得分析操作更有可能成功。This makes the parse operation more likely to succeed.

s 中使用的特定日期和时间符号和字符串(如一周中的几天的名称)是由 provider 参数定义的,如果 format 是标准格式说明符字符串,则它是 s 的精确格式。The particular date and time symbols and strings (such as the names of the days of the week in a particular language) used in s are defined by the provider parameter, as is the precise format of s if format is a standard format specifier string. provider 参数可以是以下任一项:The provider parameter can be any of the following:

如果 null``provider,则使用与当前区域性对应的 CultureInfo 对象。If provider is null, the CultureInfo object that corresponds to the current culture is used.

styles 参数包含一个或多个 DateTimeStyles 枚举的成员,这些成员确定 format 未定义的空白是否会出现在 s 中并控制分析操作的确切行为。The styles parameter includes one or more members of the DateTimeStyles enumeration that determine whether and where white space not defined by format can appear in s and that control the precise behavior of the parse operation. 下表描述了 DateTimeStyles 枚举的每个成员如何影响 TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) 方法的操作。The following table describes how each member of the DateTimeStyles enumeration affects the operation of the TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) method.

DateTimeStyles 成员DateTimeStyles member 描述Description
AdjustToUniversal 分析 s,并在必要时将其转换为 UTC。Parses s and, if necessary, converts it to UTC. 如果 s 包括时区偏移量,或者 s 不包含时区信息,但 styles 包含 DateTimeStyles.AssumeLocal 标志,则方法会分析该字符串,调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC,并将 Kind 属性设置为 DateTimeKind.UtcIf s includes a time zone offset, or if s contains no time zone information but styles includes the DateTimeStyles.AssumeLocal flag, the method parses the string, calls ToUniversalTime to convert the returned DateTime value to UTC, and sets the Kind property to DateTimeKind.Utc. 如果 s 指示它表示 UTC,或者 s 不包含时区信息,但 styles 包含 DateTimeStyles.AssumeUniversal 标志,则方法分析字符串,不对返回的 DateTime 值执行时区转换,并将 Kind 属性设置为 DateTimeKind.UtcIf s indicates that it represents UTC, or if s does not contain time zone information but styles includes the DateTimeStyles.AssumeUniversal flag, the method parses the string, performs no time zone conversion on the returned DateTime value, and sets the Kind property to DateTimeKind.Utc. 在所有其他情况下,该标志不起作用。In all other cases, the flag has no effect.
AllowInnerWhite 指定不由 format 定义的空白可以出现在任何单个日期或时间元素之间。Specifies that white space not defined by format can appear between any individual date or time element.
AllowLeadingWhite 指定不由 format 定义的空白可出现在 s的开头。Specifies that white space not defined by format can appear at the beginning of s.
AllowTrailingWhite 指定 format 中未定义的空白可出现在 s的末尾。Specifies that white space not defined by format can appear at the end of s.
AllowWhiteSpaces 指定 s 可能包含 format未定义的前导空格、内部空格和尾随空格。Specifies that s may contain leading, inner, and trailing white spaces not defined by format.
AssumeLocal 指定如果 s 缺少任何时区信息,则假定它表示本地时间。Specifies that if s lacks any time zone information, it is assumed to represent a local time. 除非 DateTimeStyles.AdjustToUniversal 标志存在,否则返回 DateTime 值的 Kind 属性将设置为 DateTimeKind.LocalUnless the DateTimeStyles.AdjustToUniversal flag is present, the Kind property of the returned DateTime value is set to DateTimeKind.Local.
AssumeUniversal 指定如果 s 缺少任何时区信息,则假定它表示 UTC。Specifies that if s lacks any time zone information, it is assumed to represent UTC. 除非存在 DateTimeStyles.AdjustToUniversal 标志,否则方法会将返回的 DateTime 值从 UTC 转换为本地时间,并将其 Kind 属性设置为 DateTimeKind.LocalUnless the DateTimeStyles.AdjustToUniversal flag is present, the method converts the returned DateTime value from UTC to local time and sets its Kind property to DateTimeKind.Local.
NoCurrentDateDefault 如果 s 包含时间而不包含日期信息,则返回值的日期设置为 DateTime.MinValue.DateIf s contains time without date information, the date of the return value is set to DateTime.MinValue.Date.
None s 参数使用默认值进行分析。The s parameter is parsed using default values. 不允许 format 中存在的任何空白区域。No white space other than that present in format is allowed. 如果 s 缺少日期组件,则返回的 DateTime 值的日期设置为1/1/0001。If s lacks a date component, the date of the returned DateTime value is set to 1/1/0001. 如果 s 不包含时区信息,则返回的 DateTime 对象的 Kind 属性将设置为 DateTimeKind.UnspecifiedIf s contains no time zone information, the Kind property of the returned DateTime object is set to DateTimeKind.Unspecified. 如果 s中存在时区信息,则该时间将转换为本地时间,并且返回的 DateTime 对象的 Kind 属性将设置为 "DateTimeKind.Local"。If time zone information is present in s, the time is converted to local time and the Kind property of the returned DateTime object is set to DateTimeKind.Local.
RoundtripKind 对于包含时区信息的字符串,尝试防止转换为其 Kind 属性设置为 "DateTimeKind.Local" 的 DateTime 值。For strings that contain time zone information, tries to prevent the conversion to a DateTime value with its Kind property set to DateTimeKind.Local. 此标志主要用于防止 UTC 时间转换为本地时间。This flag primarily prevents the conversion of UTC times to local times.

调用方说明

.NET Framework 4.NET Framework 4中,如果要分析的字符串包含不在协议中的小时组件和 AM/PM 指示符,则 TryParseExact 方法返回 falseIn the .NET Framework 4.NET Framework 4, the TryParseExact method returns false if the string to be parsed contains an hour component and an AM/PM designator that are not in agreement. .NET Framework 3.5.NET Framework 3.5 及更早版本中,将忽略 AM/PM 指示符。In the .NET Framework 3.5.NET Framework 3.5 and earlier versions, the AM/PM designator is ignored.

另请参阅

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

使用指定的格式数组、区域性特定格式信息和样式,将日期和时间的指定字符串表示形式转换为其等效的 DateTimeConverts the specified string representation of a date and time to its DateTime equivalent using the specified array of formats, culture-specific format information, and style. 字符串表示形式的格式必须至少与指定的格式之一完全匹配。The format of the string representation must match at least one of the specified formats exactly. 该方法返回一个指示转换是否成功的值。The method returns a value that indicates whether the conversion succeeded.

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

参数

s
String

包含要转换的日期和时间的字符串。A string that contains a date and time to convert.

formats
String[]

s 的允许格式的数组。An array of allowable formats of s.

provider
IFormatProvider

一个对象,提供有关 s 的区域性特定格式信息。An object that supplies culture-specific format information about s.

style
DateTimeStyles

枚举值的一个按位组合,指示 s 所允许的格式。A bitwise combination of enumeration values that indicates the permitted format of s. 要指定的一个典型值为 NoneA typical value to specify is None.

result
DateTime

当此方法返回时,如果转换成功,则包含与 DateTime 中包含的日期和时间等效的 s 值;如果转换失败,则为 MinValueWhen this method returns, contains the DateTime value equivalent to the date and time contained in s, if the conversion succeeded, or MinValue if the conversion failed. 如果 sformatsnullsformats 的某个元素为空字符串, 或者 s 的格式与 formats 中的格式模式所指定的格式都不完全匹配,则转换失败。The conversion fails if s or formats is null, s or an element of formats is an empty string, or the format of s is not exactly as specified by at least one of the format patterns in formats. 此参数未经初始化即被传递。This parameter is passed uninitialized.

返回

如果 true 参数成功转换,则为 s;否则为 falsetrue if the s parameter was converted successfully; otherwise, false.

异常

styles 不是有效的 DateTimeStyles 值。styles is not a valid DateTimeStyles value.

- 或 --or- styles 包含无效的 DateTimeStyles 值组合(例如,AssumeLocalAssumeUniversal)。styles contains an invalid combination of DateTimeStyles values (for example, both AssumeLocal and AssumeUniversal).

示例

下面的示例使用 DateTime.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) 方法,以确保可以成功分析多种可能格式的字符串。The following example uses the DateTime.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) method to ensure that a string in a number of possible formats can be successfully parsed .

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] formats= {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", 
                         "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", 
                         "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", 
                         "M/d/yyyy h:mm", "M/d/yyyy h:mm", 
                         "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm"};
      string[] dateStrings = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM", 
                              "5/1/2009 6:32:00", "05/01/2009 06:32", 
                              "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00"}; 
      DateTime dateValue;
      
      foreach (string dateString in dateStrings)
      {
         if (DateTime.TryParseExact(dateString, formats, 
                                    new CultureInfo("en-US"), 
                                    DateTimeStyles.None, 
                                    out dateValue))
            Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
         else
            Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
      }
   }
}
// The example displays the following output:
//       Converted '5/1/2009 6:32 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 6:32:05 PM' to 5/1/2009 6:32:05 PM.
//       Converted '5/1/2009 6:32:00' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32' to 5/1/2009 6:32:00 AM.
//       Converted '05/01/2009 06:32:00 PM' to 5/1/2009 6:32:00 PM.
//       Converted '05/01/2009 06:32:00' to 5/1/2009 6:32:00 AM.
Imports System.Globalization

Public Module Example
   Public Sub Main()
      Dim formats() As String = {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", _
                                 "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", _
                                 "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", _
                                 "M/d/yyyy h:mm", "M/d/yyyy h:mm", _
                                 "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm"}
      Dim dateStrings() As String = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM", _
                                     "5/1/2009 6:32:00", "05/01/2009 06:32", _
                                     "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00"} 

      Dim dateValue As DateTime
      
      For Each dateString As String In dateStrings
         If Date.TryParseExact(dateString, formats, _
                               New CultureInfo("en-US"), _
                               DateTimeStyles.None, _
                               dateValue) Then
            Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue)
         Else
            Console.WriteLine("Unable to convert '{0}' to a date.", dateString)
         End If                                               
      Next
   End Sub   
End Module
' The example displays the following output:
'       Converted '5/1/2009 6:32 PM' to 5/1/2009 6:32:00 PM.
'       Converted '05/01/2009 6:32:05 PM' to 5/1/2009 6:32:05 PM.
'       Converted '5/1/2009 6:32:00' to 5/1/2009 6:32:00 AM.
'       Converted '05/01/2009 06:32' to 5/1/2009 6:32:00 AM.
'       Converted '05/01/2009 06:32:00 PM' to 5/1/2009 6:32:00 PM.
'       Converted '05/01/2009 06:32:00' to 5/1/2009 6:32:00 AM.

注解

DateTime.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) 方法分析与分配给 formats 参数的模式之一匹配的日期的字符串表示形式。The DateTime.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) method parses the string representation of a date that matches any one of the patterns assigned to the formats parameter. 它类似于 DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles) 方法,但如果转换失败,则 TryParseExact 方法不会引发异常。It is like the DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles) method, except the TryParseExact method does not throw an exception if the conversion fails.

s 参数包含要分析的日期和时间。The s parameter contains the date and time to parse. 如果 s 参数只包含时间而不包含日期,则使用当前日期,除非 style 参数包括 DateTimeStyles.NoCurrentDateDefault 标志,在这种情况下,将使用默认日期(DateTime.Date.MinValue)。If the s parameter contains only a time and no date, the current date is used unless the style parameter includes the DateTimeStyles.NoCurrentDateDefault flag, in which case the default date (DateTime.Date.MinValue) is used. 如果 s 参数只包含日期而没有时间,则使用午夜(00:00:00)。If the s parameter contains only a date and no time, midnight (00:00:00) is used. style 参数还可确定 s 参数是否可以包含 formats中的某个格式字符串所允许的前导、内部或尾随空格字符。The style parameter also determines whether the s parameter can contain leading, inner, or trailing white space characters other than those permitted by one of the format strings in formats.

如果 s 不包含时区信息,则 DateTimeKind.Unspecified返回的 DateTime 对象的 Kind 属性。If s contains no time zone information, the Kind property of the returned DateTime object is DateTimeKind.Unspecified. 此行为可以通过使用 DateTimeStyles.AssumeLocal 标志来更改,该标志返回 Kind 属性 DateTimeKind.LocalDateTime 值,或者使用 DateTimeStyles.AssumeUniversalDateTimeStyles.AdjustToUniversal 标志,该标志返回 DateTime 属性 KindDateTimeKind.Utc值。This behavior can be changed by using the DateTimeStyles.AssumeLocal flag, which returns a DateTime value whose Kind property is DateTimeKind.Local, or by using the DateTimeStyles.AssumeUniversal and DateTimeStyles.AdjustToUniversal flags, which returns a DateTime value whose Kind property is DateTimeKind.Utc. 如果包含时区信息,则时间将转换为本地时间(如有必要),并将返回的 DateTime 对象的 Kind 属性设置为 DateTimeKind.LocalIf s contains time zone information, the time is converted to local time, if necessary, and the Kind property of the returned DateTime object is set to DateTimeKind.Local. 可以通过使用 DateTimeStyles.RoundtripKind 标志来更改此行为,以便不将协调世界时(UTC)转换为本地时间,并将 Kind 属性设置为 DateTimeKind.UtcThis behavior can be changed by using the DateTimeStyles.RoundtripKind flag to not convert Coordinated Universal Time (UTC) to a local time and set the Kind property to DateTimeKind.Utc.

formats 参数包含一组模式,如果分析操作成功,则其中一个 s 必须完全匹配。The formats parameter contains an array of patterns, one of which s must match exactly if the parse operation is to succeed. formats 参数中的模式包含自定义日期和时间格式字符串表中的一个或多个自定义格式说明符,或从标准日期和时间格式字符串表中标识预定义模式的单个标准格式说明符。The patterns in the formats parameter consist of one or more custom format specifiers from the Custom Date and Time Format Strings table, or a single standard format specifier, which identifies a predefined pattern, from the Standard Date and Time Format Strings table.

如果在自定义格式模式下不使用日期或时间分隔符,请为 provider 参数使用固定区域性,并为每个自定义格式说明符使用最宽形式。If you do not use date or time separators in a custom format pattern, use the invariant culture for the provider parameter and the widest form of each custom format specifier. 例如,如果想要在模式中指定小时数,请指定更宽的形式 "HH",而不是 "H"。For example, if you want to specify hours in the pattern, specify the wider form, "HH", instead of the narrower form, "H".

s 中使用的特定日期和时间符号和字符串(如一周中的几天的名称)是由 provider 参数定义的,如果 format 是标准格式说明符字符串,则它是 s 的精确格式。The particular date and time symbols and strings (such as the names of the days of the week in a particular language) used in s are defined by the provider parameter, as is the precise format of s if format is a standard format specifier string. provider 参数可以是以下任一项:The provider parameter can be any of the following:

如果 null``provider,则使用与当前区域性对应的 CultureInfo 对象。If provider is null, the CultureInfo object that corresponds to the current culture is used.

styles 参数包含一个或多个 DateTimeStyles 枚举的成员,这些成员确定 format 未定义的空白是否会出现在 s 中并控制分析操作的确切行为。The styles parameter includes one or more members of the DateTimeStyles enumeration that determine whether and where white space not defined by format can appear in s and that control the precise behavior of the parse operation. 下表描述了 DateTimeStyles 枚举的每个成员如何影响 TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) 方法的操作。The following table describes how each member of the DateTimeStyles enumeration affects the operation of the TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) method.

DateTimeStyles 成员DateTimeStyles member 描述Description
AdjustToUniversal 分析 s,并在必要时将其转换为 UTC。Parses s and, if necessary, converts it to UTC. 如果 s 包括时区偏移量,或者 s 不包含时区信息,但 styles 包含 DateTimeStyles.AssumeLocal 标志,则方法会分析该字符串,调用 ToUniversalTime 将返回的 DateTime 值转换为 UTC,并将 Kind 属性设置为 DateTimeKind.UtcIf s includes a time zone offset, or if s contains no time zone information but styles includes the DateTimeStyles.AssumeLocal flag, the method parses the string, calls ToUniversalTime to convert the returned DateTime value to UTC, and sets the Kind property to DateTimeKind.Utc. 如果 s 指示它表示 UTC,或者 s 不包含时区信息,但 styles 包含 DateTimeStyles.AssumeUniversal 标志,则方法分析字符串,不对返回的 DateTime 值执行时区转换,并将 Kind 属性设置为 DateTimeKind.UtcIf s indicates that it represents UTC, or if s does not contain time zone information but styles includes the DateTimeStyles.AssumeUniversal flag, the method parses the string, performs no time zone conversion on the returned DateTime value, and sets the Kind property to DateTimeKind.Utc. 在所有其他情况下,该标志不起作用。In all other cases, the flag has no effect.
AllowInnerWhite 指定不由 format 定义的空白可以出现在任何单个日期或时间元素之间。Specifies that white space not defined by format can appear between any individual date or time element.
AllowLeadingWhite 指定不由 format 定义的空白可出现在 s的开头。Specifies that white space not defined by format can appear at the beginning of s.
AllowTrailingWhite 指定 format 中未定义的空白可出现在 s的末尾。Specifies that white space not defined by format can appear at the end of s.
AllowWhiteSpaces 指定 s 可能包含 format未定义的前导空格、内部空格和尾随空格。Specifies that s may contain leading, inner, and trailing white spaces not defined by format.
AssumeLocal 指定如果 s 缺少任何时区信息,则假定它表示本地时间。Specifies that if s lacks any time zone information, it is assumed to represent a local time. 除非 DateTimeStyles.AdjustToUniversal 标志存在,否则返回 DateTime 值的 Kind 属性将设置为 DateTimeKind.LocalUnless the DateTimeStyles.AdjustToUniversal flag is present, the Kind property of the returned DateTime value is set to DateTimeKind.Local.
AssumeUniversal 指定如果 s 缺少任何时区信息,则假定它表示 UTC。Specifies that if s lacks any time zone information, it is assumed to represent UTC. 除非存在 DateTimeStyles.AdjustToUniversal 标志,否则方法会将返回的 DateTime 值从 UTC 转换为本地时间,并将其 Kind 属性设置为 DateTimeKind.LocalUnless the DateTimeStyles.AdjustToUniversal flag is present, the method converts the returned DateTime value from UTC to local time and sets its Kind property to DateTimeKind.Local.
NoCurrentDateDefault 如果 s 包含时间而不包含日期信息,则返回值的日期设置为 DateTime.MinValue.DateIf s contains time without date information, the date of the return value is set to DateTime.MinValue.Date.
None s 参数使用默认值进行分析。The s parameter is parsed using default values. 不允许 format 中存在的任何空白区域。No white space other than that present in format is allowed. 如果 s 缺少日期组件,则返回的 DateTime 值的日期设置为1/1/0001。If s lacks a date component, the date of the returned DateTime value is set to 1/1/0001. 如果 s 不包含时区信息,则返回的 DateTime 对象的 Kind 属性将设置为 DateTimeKind.UnspecifiedIf s contains no time zone information, the Kind property of the returned DateTime object is set to DateTimeKind.Unspecified. 如果 s中存在时区信息,则该时间将转换为本地时间,并且返回的 DateTime 对象的 Kind 属性将设置为 "DateTimeKind.Local"。If time zone information is present in s, the time is converted to local time and the Kind property of the returned DateTime object is set to DateTimeKind.Local.
RoundtripKind 对于包含时区信息的字符串,尝试防止转换为其 Kind 属性设置为 "DateTimeKind.Local" 的 DateTime 值。For strings that contain time zone information, tries to prevent the conversion to a DateTime value with its Kind property set to DateTimeKind.Local. 此标志主要用于防止 UTC 时间转换为本地时间。This flag primarily prevents the conversion of UTC times to local times.

调用方说明

.NET Framework 4.NET Framework 4中,如果要分析的字符串包含不在协议中的小时组件和 AM/PM 指示符,则 TryParseExact 方法返回 falseIn the .NET Framework 4.NET Framework 4, the TryParseExact method returns false if the string to be parsed contains an hour component and an AM/PM designator that are not in agreement. .NET Framework 3.5.NET Framework 3.5 及更早版本中,将忽略 AM/PM 指示符。In the .NET Framework 3.5.NET Framework 3.5 and earlier versions, the AM/PM designator is ignored.

另请参阅

适用于