DateTime.TryParseExact 方法

定義

將日期和時間的指定字串表示,轉換為其相等的 DateTime。 字串表示的格式必須完全符合指定的格式。 此方法會傳回值,這個值表示轉換是否成功。

多載

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

使用指定的格式、特定文化特性格式資訊以及樣式,以將日期和時間的指定範圍表示轉換為與其相等的 DateTime。 字串表示的格式必須完全符合指定的格式。 此方法會傳回值,這個值表示轉換是否成功。

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

將日期和時間的指定字元範圍轉換為與其相等的 DateTime,並傳回一個值表示轉換是否成功。

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

使用指定的格式、特定文化特性格式資訊以及樣式,將日期和時間的指定字串表示,轉換為其相等的 DateTime。 字串表示的格式必須完全符合指定的格式。 此方法會傳回值,這個值表示轉換是否成功。

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

使用指定的格式陣列、特定文化特性格式資訊以及樣式,將日期和時間的指定字串表示,轉換為其相等的 DateTime。 字串表示的格式必須至少完全符合其中一個指定格式。 此方法會傳回值,這個值表示轉換是否成功。

備註

重要

日本曆法的紀元是以天皇的統治為基礎,因此有變更是正常的。 例如,2019 年 5 月 1 日之後,JapaneseCalendarJapaneseLunisolarCalendar 中將開始使用「令和」。 此變更對使用這些日曆的所有應用程式都有影響。 如需詳細資訊,以及判斷您的應用程式是否受到影響,請參閱 在 .NET 中處理日曆的新紀元。 如需在 Windows 系統上測試應用程式以確保其對紀元變更整備的資訊,請參閱 為日文紀元變更準備您的應用程式。 如需支援多個紀元之行事曆的 .NET 功能,以及使用支援多個紀元的行事歷時的最佳做法,請參閱 使用紀元。

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

來源:
DateTime.cs
來源:
DateTime.cs
來源:
DateTime.cs

使用指定的格式、特定文化特性格式資訊以及樣式,以將日期和時間的指定範圍表示轉換為與其相等的 DateTime。 字串表示的格式必須完全符合指定的格式。 此方法會傳回值,這個值表示轉換是否成功。

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);
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>

包含字元的範圍,其表示要轉換的日期和時間。

format
ReadOnlySpan<Char>

s 的必要格式。

provider
IFormatProvider

物件,其提供關於 s 的特定文化特性格式資訊。

style
DateTimeStyles

一個或多個列舉值的位元組合,表示 s 的允許格式。

result
DateTime

當這個方法傳回時,如果轉換成功,則包含相當於 中所 s 包含日期和時間的值;如果轉換失敗,則包含 DateTimeDateTime.MinValue。 如果 sformat 參數為 null、空字串,或不包含與 format 中指定之模式相對應的日期和時間,則此轉換作業會失敗。 這個參數會以未初始化的狀態傳遞。

傳回

如果 s 轉換成功,則為 true,否則為 false

適用於

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

來源:
DateTime.cs
來源:
DateTime.cs
來源:
DateTime.cs

將日期和時間的指定字元範圍轉換為與其相等的 DateTime,並傳回一個值表示轉換是否成功。

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);
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>

包含所要剖析字串的範圍。

formats
String[]

s 允許的格式陣列。

provider
IFormatProvider

物件,其提供關於 s 的特定文化特性格式資訊。

style
DateTimeStyles

列舉值的位元組合,這個組合會定義如何根據目前時區或目前日期解譯已剖析的日期。 一般會指定的值是 None

result
DateTime

當這個方法傳回時,如果轉換成功,則包含相當於 中所 s 包含日期和時間的值;如果轉換失敗,則包含 DateTimeDateTime.MinValue。 如果 s 參數為 nullEmpty,或不包含日期和時間的有效字串表示,則轉換會失敗。 這個參數會以未初始化的狀態傳遞。

傳回

如果 true 參數轉換成功,則為 s,否則為 false

適用於

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

來源:
DateTime.cs
來源:
DateTime.cs
來源:
DateTime.cs

使用指定的格式、特定文化特性格式資訊以及樣式,將日期和時間的指定字串表示,轉換為其相等的 DateTime。 字串表示的格式必須完全符合指定的格式。 此方法會傳回值,這個值表示轉換是否成功。

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);
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

字串,含有要轉換的日期和時間。

format
String

s 的必要格式。

provider
IFormatProvider

物件,其提供關於 s 的特定文化特性格式資訊。

style
DateTimeStyles

一個或多個列舉值的位元組合,表示 s 的允許格式。

result
DateTime

當這個方法傳回時,如果轉換成功,則包含相當於 中所 s 包含日期和時間的值;如果轉換失敗,則包含 DateTimeDateTime.MinValue。 如果 sformat 參數為 null、空字串,或不包含與 format 中指定之模式相對應的日期和時間,則此轉換作業會失敗。 這個參數會以未初始化的狀態傳遞。

傳回

如果 s 轉換成功,則為 true,否則為 false

例外狀況

styles 不是有效的 DateTimeStyles 值。

-或-

styles 包含 DateTimeStyles 值的無效組合 (例如,AssumeLocalAssumeUniversal)。

範例

下列範例示範 DateTime.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) 方法。 請注意,當參數等於 DateTimeStyles.None 時,無法成功剖析字串 「5/01/2009 8:30 AM」, styles 因為 不允許前置空格。 format 此外,字串 「5/01/2009 09:00」 無法成功 format 剖析為 「MM/dd/yyyyhh:mm」 的字串,因為日期字串不會在月份編號前面加上前置零,因為需要 format

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).
open System
open System.Globalization

[<EntryPoint>]
let main _ =
    let enUS = CultureInfo "en-US"

    // Parse date with no style flags.
    let dateString = " 5/01/2009 8:30 AM"
    match DateTime.TryParseExact(dateString, "g", enUS, DateTimeStyles.None) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."              
    | _ ->
        printfn $"'{dateString}' is not in an acceptable format."

    // Allow a leading space in the date string.
    match DateTime.TryParseExact(dateString, "g", enUS, DateTimeStyles.AllowLeadingWhite) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    | _ ->
        printfn $"'{dateString}' is not in an acceptable format."

    // Use custom formats with M and MM.
    let dateString = "5/01/2009 09:00"
    match DateTime.TryParseExact(dateString, "M/dd/yyyy hh:mm", enUS, DateTimeStyles.None) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    | _ ->
        printfn $"'{dateString}' is not in an acceptable format."

    // Allow a leading space in the date string.
    match DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm", enUS, DateTimeStyles.None) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    | _ ->
        printfn $"'{dateString}' is not in an acceptable format."

    // Parse a string with time zone information.
    let dateString = "05/01/2009 01:30:42 PM -05:00"
    match DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.None) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    | _ ->
        printfn $"'{dateString}' is not in an acceptable format."

    // Allow a leading space in the date string.
    match DateTime.TryParseExact(dateString, "MM/dd/yyyy hh:mm:ss tt zzz", enUS, DateTimeStyles.AdjustToUniversal) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    | _ ->
        printfn $"'{dateString}' is not in an acceptable format."

    // Parse a string representing UTC.
    let dateString = "2008-06-11T16:11:20.0904778Z"
    match DateTime.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, DateTimeStyles.None) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    | _ ->
        printfn $"'{dateString}' is not in an acceptable format."

    match DateTime.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue} ({dateValue.Kind})."
    | _ ->
        printfn $"'{dateString}' is not in an acceptable format."

    0

    // 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 定義的格式。 這與 DateTime.ParseExact(String, String, IFormatProvider, DateTimeStyles) 方法類似,不同之處在于,如果轉換失敗,方法 TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) 不會擲回例外狀況。

參數 s 包含剖析的日期和時間,而且必須是 參數所 format 定義的格式。 如果日期、時間和時區元素存在於 中 s ,它們也必須以 所 format 指定的順序顯示。 如果 format 定義沒有時間元素的日期,且剖析作業成功,則產生的 DateTime 值會是午夜 (00:00:00) 。 如果 format 定義沒有 date 元素且剖析作業成功的時間,則結果 DateTime 值預設為 的日期 DateTime.Now.Date 為 ,如果包含 DateTimeStyles.NoCurrentDateDefault 旗標,則為 的日期 DateTime.MinValue.Datestyles 。 參數 style 會決定參數是否可以 s 包含前置、內部或尾端空白字元。

如果 s 不包含時區資訊,則 KindDateTime 回物件的 屬性為 DateTimeKind.Unspecified 。 您可以使用 旗標來變更此行為,這個旗標會傳 DateTimeStyles.AssumeLocalDateTimeKind 屬性為 DateTimeKind.Local 的值,或是使用 DateTimeStyles.AssumeUniversalDateTimeStyles.AdjustToUniversal 旗標,傳回 DateTime 其屬性為 DateTimeKind.Utc 的值 Kind 。 如果 s 包含時區資訊,時間會視需要轉換成當地時間,而 KindDateTime 回物件的 屬性會設定為 DateTimeKind.Local 。 您可以使用 旗標將國際標準時間 (UTC (UTC) 轉換為當地時間,並將 屬性設定 KindDateTimeKind.Utc ,藉此變更 DateTimeStyles.RoundtripKind 此行為。

參數 format 包含對應至參數預期格式的 s 模式。 參數中的 format 模式是由 自訂日期和時間格式字串 資料表中的一或多個自訂格式規範所組成,或是從 標準日期和時間格式字串 資料表識別預先定義模式的單一標準格式規範。

如果您未在自訂格式模式中使用日期或時間分隔符號,請使用參數的不變異文化特性 provider ,以及每個自訂格式規範的最寬格式。 例如,如果您想要在模式中指定小時,請指定較寬的格式 「HH」,而不是較窄的表單 「H」。

注意

您可以呼叫 DateTime.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) 方法,並指定多個允許的格式,而不需要 s 符合單一格式才能讓剖析作業成功。 這可讓剖析作業更可能成功。

參數會定義 provider 特定語言 (特定日期和時間符號和字串,例如,在 中使用 s 特定語言) 星期幾的名稱,就像 是標準格式規範字符串時的精確格式 sformat 一樣。 參數 provider 可以是下列任一項:

如果 為 providernull ,則會 CultureInfo 使用對應至目前文化特性的物件。

參數 styles 包含列舉的 DateTimeStyles 一或多個成員,可判斷 和 未定義的 format 空白字元是否可以出現在 中 s ,以及控制剖析作業的精確行為。 下表描述列舉的每個成員 DateTimeStyles 如何影響方法的 TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) 作業。

DateTimeStyles 成員 描述
AdjustToUniversal 視需要剖析 s ,並將它轉換成 UTC。 如果 s 包含時區位移,或如果 s 不包含時區資訊,但 styles 包含 DateTimeStyles.AssumeLocal 旗標,方法會剖析字串、呼叫 ToUniversalTime 以將傳 DateTime 回的值轉換為 UTC,並將 屬性設定 KindDateTimeKind.Utc 。 如果 s 表示它代表 UTC,或者如果 s 不包含時區資訊,但 styles 包含 DateTimeStyles.AssumeUniversal 旗標,則 方法會剖析字串、在傳 DateTime 回的值上不執行時區轉換,並將 屬性設定 KindDateTimeKind.Utc 。 在其他所有情況下,旗標沒有任何作用。
AllowInnerWhite 指定未定義的 format 空白字元可以出現在任何個別的日期或時間元素之間。
AllowLeadingWhite 指定 未定義的 format 空白字元可以出現在 的 s 開頭。
AllowTrailingWhite 指定 未定義的 format 空白字元可以出現在 的 s 結尾。
AllowWhiteSpaces 指定可能包含 s 未定義的前置、內部和尾端空白字元 format
AssumeLocal 指定如果 s 缺少任何時區資訊,則會假設它代表當地時間。 除非有 DateTimeStyles.AdjustToUniversal 旗標, Kind 否則傳 DateTime 回值的 屬性會設定為 DateTimeKind.Local
AssumeUniversal 指定如果 s 缺少任何時區資訊,則會假設它代表 UTC。 DateTimeStyles.AdjustToUniversal除非有 旗標,否則 方法會將傳 DateTime 回的值從 UTC 轉換為當地時間,並將其 屬性設定 KindDateTimeKind.Local
NoCurrentDateDefault 如果 s 包含沒有日期資訊的時間,則傳回值的日期會設定為 DateTime.MinValue.Date
None 參數 s 是使用預設值剖析。 不允許存在 以外的 format 空白字元。 如果 s 缺少日期元件,傳 DateTime 回值的日期會設定為 1/1/0001。 如果 s 不包含時區資訊,則 KindDateTime 回物件的 屬性會設定為 DateTimeKind.Unspecified 。 如果時區資訊存在於 中 s ,時間會轉換成當地時間,而 KindDateTime 回物件的 屬性會設定為 DateTimeKind.Local
RoundtripKind 對於包含時區資訊的字串,嘗試防止轉換成 DateTimeKind 屬性設定為 DateTimeKind.Local 的值。 此旗標主要會防止 UTC 時間轉換為當地時間。

給呼叫者的注意事項

在 .NET Framework 4 中,如果要剖析的字串包含一個小時元件,以及不在合約中的 AM/PM 指示項,則 TryParseExact 方法會傳回 false 。 在 .NET Framework 3.5 和更早版本中,會忽略 AM/PM 指示項。

另請參閱

適用於

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

來源:
DateTime.cs
來源:
DateTime.cs
來源:
DateTime.cs

使用指定的格式陣列、特定文化特性格式資訊以及樣式,將日期和時間的指定字串表示,轉換為其相等的 DateTime。 字串表示的格式必須至少完全符合其中一個指定格式。 此方法會傳回值,這個值表示轉換是否成功。

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);
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

字串,包含要轉換的日期和時間。

formats
String[]

s 允許的格式陣列。

provider
IFormatProvider

提供關於 s 之特定文化特性格式資訊的物件。

style
DateTimeStyles

列舉值的位元組合,其表示 s 所允許的格式。 一般會指定的值是 None

result
DateTime

當這個方法傳回時,如果轉換成功,則包含相當於 中所 s 包含日期和時間的值;如果轉換失敗,則包含 DateTimeDateTime.MinValue。 如果 sformatsnullsformats 的一個項目為空字串,或是 s 的格式沒有與 formats 中的至少一個格式模式所指定的內容完全相同,則此轉換作業會失敗。 這個參數會以未初始化的狀態傳遞。

傳回

如果 true 參數轉換成功,則為 s,否則為 false

例外狀況

styles 不是有效的 DateTimeStyles 值。

-或-

styles 包含 DateTimeStyles 值的無效組合 (例如,AssumeLocalAssumeUniversal)。

範例

下列範例會 DateTime.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) 使用 方法來確保可以成功剖析一些可能格式的字串。

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.
open System
open System.Globalization

let 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" |]

let 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" ]

for dateString in dateStrings do
    match DateTime.TryParseExact(dateString, formats, CultureInfo "en-US", DateTimeStyles.None) with
    | true, dateValue ->
        printfn $"Converted '{dateString}' to {dateValue}."
    | _ ->
        printfn $"Unable to convert '{dateString}' to a date."


// 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 參數的任何一個模式。 就像 方法 DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles) 一樣,除非 TryParseExact 方法在轉換失敗時不會擲回例外狀況。

參數 s 包含剖析的日期和時間。 s如果參數只包含時間和沒有日期,除非參數包含 DateTimeStyles.NoCurrentDateDefault 旗標,否則 style 會使用目前的日期,在此情況下會使用預設日期 (DateTime.Date.MinValue) 。 s如果參數只包含日期且沒有時間,則會使用午夜 (00:00:00) 。 參數 style 也會判斷 參數是否可以 s 包含 中其中一個格式字串 formats 所允許的前置、內部或尾端空白字元。

如果 s 不包含時區資訊,則 KindDateTime 回物件的 屬性為 DateTimeKind.Unspecified 。 您可以使用 旗標來變更此行為,這個旗標會傳 DateTimeStyles.AssumeLocalDateTimeKind 屬性為 DateTimeKind.Local 的值,或是使用 DateTimeStyles.AssumeUniversalDateTimeStyles.AdjustToUniversal 旗標,傳回 DateTime 其屬性為 DateTimeKind.Utc 的值 Kind 。 如果 s 包含時區資訊,時間會視需要轉換成當地時間,而 KindDateTime 回物件的 屬性會設定為 DateTimeKind.Local 。 您可以使用 旗標將國際標準時間 (UTC (UTC) 轉換為當地時間,並將 屬性設定 KindDateTimeKind.Utc ,藉此變更 DateTimeStyles.RoundtripKind 此行為。

參數 formats 包含模式陣列,其中 s 一個必須完全符合剖析作業成功。 參數中的 formats 模式是由 自訂日期和時間格式字串 資料表中的一或多個自訂格式規範所組成,或是從 標準日期和時間格式字串 資料表識別預先定義的模式的單一標準格式規範。

如果您未在自訂格式模式中使用日期或時間分隔符號,請使用參數的不變異文化特性 provider ,以及每個自訂格式規範的最寬格式。 例如,如果您想要在模式中指定小時,請指定較寬的格式 「HH」,而不是較窄的表單 「H」。

參數會定義 provider 特定語言 (特定日期和時間符號和字串,例如,在 中使用 s 特定語言) 星期幾的名稱,就像 是標準格式規範字符串時的精確格式 sformat 一樣。 參數 provider 可以是下列任一項:

如果 為 providernull ,則會 CultureInfo 使用對應至目前文化特性的物件。

參數 styles 包含列舉的 DateTimeStyles 一或多個成員,可判斷 和 未定義的 format 空白字元是否可以出現在 中 s ,以及控制剖析作業的精確行為。 下表描述列舉的每個成員 DateTimeStyles 如何影響方法的 TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) 作業。

DateTimeStyles 成員 描述
AdjustToUniversal 視需要剖析 s ,並將它轉換成 UTC。 如果 s 包含時區位移,或如果 s 不包含時區資訊,但 styles 包含 DateTimeStyles.AssumeLocal 旗標,方法會剖析字串、呼叫 ToUniversalTime 以將傳 DateTime 回的值轉換為 UTC,並將 屬性設定 KindDateTimeKind.Utc 。 如果 s 表示它代表 UTC,或者如果 s 不包含時區資訊,但 styles 包含 DateTimeStyles.AssumeUniversal 旗標,則 方法會剖析字串、在傳 DateTime 回的值上不執行時區轉換,並將 屬性設定 KindDateTimeKind.Utc 。 在其他所有情況下,旗標沒有任何作用。
AllowInnerWhite 指定未定義的 format 空白字元可以出現在任何個別的日期或時間元素之間。
AllowLeadingWhite 指定 未定義的 format 空白字元可以出現在 的 s 開頭。
AllowTrailingWhite 指定 未定義的 format 空白字元可以出現在 的 s 結尾。
AllowWhiteSpaces 指定可能包含 s 未定義的前置、內部和尾端空白字元 format
AssumeLocal 指定如果 s 缺少任何時區資訊,則會假設它代表當地時間。 除非有 DateTimeStyles.AdjustToUniversal 旗標, Kind 否則傳 DateTime 回值的 屬性會設定為 DateTimeKind.Local
AssumeUniversal 指定如果 s 缺少任何時區資訊,則會假設它代表 UTC。 DateTimeStyles.AdjustToUniversal除非有 旗標,否則 方法會將傳 DateTime 回的值從 UTC 轉換為當地時間,並將其 屬性設定 KindDateTimeKind.Local
NoCurrentDateDefault 如果 s 包含沒有日期資訊的時間,則傳回值的日期會設定為 DateTime.MinValue.Date
None 參數 s 是使用預設值剖析。 不允許存在 以外的 format 空白字元。 如果 s 缺少日期元件,傳 DateTime 回值的日期會設定為 1/1/0001。 如果 s 不包含時區資訊,則 KindDateTime 回物件的 屬性會設定為 DateTimeKind.Unspecified 。 如果時區資訊存在於 中 s ,時間會轉換成當地時間,而 KindDateTime 回物件的 屬性會設定為 DateTimeKind.Local
RoundtripKind 對於包含時區資訊的字串,嘗試防止轉換成 DateTimeKind 屬性設定為 DateTimeKind.Local 的值。 此旗標主要會防止 UTC 時間轉換為當地時間。

給呼叫者的注意事項

在 .NET Framework 4 中,如果要剖析的字串包含一個小時元件,以及不在合約中的 AM/PM 指示項,則 TryParseExact 方法會傳回 false 。 在 .NET Framework 3.5 和更早版本中,會忽略 AM/PM 指示項。

另請參閱

適用於