DateTime.TryParseExact 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將日期和時間的指定字串表示轉換為其相等的 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 日在 JapaneseCalendar 和 JapaneseLunisolarCalendar中標示了 Reiwa 時代的開頭。 這種時代變更會影響使用這些行事曆的所有應用程式。 如需詳細資訊,以及判斷您的應用程式是否受到影響,請參閱 處理 .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
中所包含日期和時間的 DateTime 值,如果轉換失敗,則 DateTime.MinValue。 如果 s
或 format
參數 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
中所包含日期和時間的 DateTime 值,如果轉換失敗,則 DateTime.MinValue。 如果 s
參數是 null
、是 Empty,或不包含日期和時間的有效字串表示,則轉換會失敗。 這個參數會未初始化傳遞。
傳回
如果已成功轉換 s
參數,true
;否則,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
中所包含日期和時間的 DateTime 值,如果轉換失敗,則 DateTime.MinValue。 如果 s
或 format
參數 null
為空字串,或不包含對應至 format
中所指定模式的日期和時間,則轉換會失敗。 這個參數會未初始化傳遞。
傳回
如果成功轉換 s
,true
;否則,false
。
例外狀況
範例
下列範例示範 DateTime.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) 方法。 請注意,當 styles
參數等於 DateTimeStyles.None 時,無法成功剖析字串 “5/01/2009 8:30”,因為 format
不允許前置空格。 此外,字串 「5/01/2009 09:00」 無法成功剖析成 “MM/dd/yyyyh:mm” 的 format
,因為日期字串在月份數位前面沒有前置零,因為 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:00) 的時間。 如果 format
定義沒有日期元素且剖析作業成功的時間,則產生的 DateTime 值預設為 DateTime.Now.Date
,或者如果 styles
包含 DateTimeStyles.NoCurrentDateDefault 旗標,則其日期為 DateTime.MinValue.Date
。
style
參數會決定 s
參數是否可以包含前置、內部或尾端空格符。
如果 s
不包含時區資訊,則傳回 DateTime 物件的 Kind 屬性會 DateTimeKind.Unspecified。 您可以使用 DateTimeStyles.AssumeLocal 旗標來變更此行為,這個旗標會傳回 Kind 屬性為 DateTimeKind.Local的 DateTime 值,或使用 DateTimeStyles.AssumeUniversal 和 DateTimeStyles.AdjustToUniversal 旗標,傳回 Kind 屬性為 DateTimeKind.Utc的 DateTime 值。 如果 s 包含時區資訊,則會視需要將時間轉換成當地時間,且傳回 DateTime 物件的 Kind 屬性會設定為 DateTimeKind.Local。 您可以使用 DateTimeStyles.RoundtripKind 旗標將國際標準時間 (UTC) 轉換成當地時間,並將 Kind 屬性設定為 DateTimeKind.Utc來變更此行為。
format
參數包含對應至 s
參數預期格式的模式。
format
參數中的模式包含 自定義日期和時間格式字元串 數據表中的一或多個自定義格式規範,或從 標準日期和時間格式字元串 數據表識別預先定義的模式規範。
如果您未在自定義格式模式中使用日期或時間分隔符,請使用 provider
參數的不變異文化特性,以及每個自定義格式規範的最寬格式。 例如,如果您想要在模式中指定時數,請指定較寬的窗體 「HH」,而不是較窄的表單 「H」。。
注意
您可以呼叫 DateTime.TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) 方法並指定多個允許的格式,而不是要求 s
符合剖析作業的單一格式。 這可讓剖析作業更可能成功。
s
中使用的特定日期和時間符號和字串(例如特定語言中星期幾的名稱)是由 provider
參數所定義,如同 format
是標準格式規範字元串時 s
的精確格式。
provider
參數可以是下列任一項:
CultureInfo 物件,表示用來解譯
s
的文化特性。 DateTimeFormat 屬性所傳回的 DateTimeFormatInfo 物件會定義s
中的符號和格式。定義日期和時間數據格式的 DateTimeFormatInfo 物件。
自訂 IFormatProvider 實作,其 GetFormat 方法會傳回 CultureInfo 物件或提供格式資訊的 DateTimeFormatInfo 物件。
如果 provider
是 null
,則會使用對應至目前文化特性的 CultureInfo 物件。
styles
參數包含一或多個 DateTimeStyles 列舉成員,可判斷 format
未定義的空格符是否會出現在 s
中,以及控制剖析作業的精確行為。 下表描述 DateTimeStyles 列舉的每個成員如何影響 TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime) 方法的作業。
DateTimeStyles 成員 | 描述 |
---|---|
AdjustToUniversal | 剖析 s ,並視需要將其轉換成 UTC。 如果 s 包含時區位移,或者如果 s 不包含時區資訊,但 styles 包含 DateTimeStyles.AssumeLocal 旗標,則方法會剖析字串、呼叫 ToUniversalTime 將傳回 DateTime 值轉換為 UTC,並將 Kind 屬性設定為 DateTimeKind.Utc。 如果 s 表示 UTC,或者如果 s 不包含時區資訊,但 styles 包含 DateTimeStyles.AssumeUniversal 旗標,則方法會剖析字串、對傳回 DateTime 值執行時區轉換,並將 Kind 屬性設定為 DateTimeKind.Utc。 在其他所有情況下,旗標沒有任何作用。 |
AllowInnerWhite | 指定 format 未定義的空格元可以出現在任何個別的日期或時間元素之間。 |
AllowLeadingWhite | 指定 format 未定義的空格符會出現在 s 開頭。 |
AllowTrailingWhite | 指定 format 未定義的空格符會出現在 s 結尾。 |
AllowWhiteSpaces | 指定 s 可能包含 format 未定義的前置、內部和尾端空格符。 |
AssumeLocal | 指定如果 s 缺少任何時區資訊,則會假設它代表當地時間。 除非 DateTimeStyles.AdjustToUniversal 旗標存在,否則傳回 DateTime 值的 Kind 屬性會設定為 DateTimeKind.Local。 |
AssumeUniversal | 指定如果 s 缺少任何時區資訊,則會假設它代表UTC。 除非 DateTimeStyles.AdjustToUniversal 旗標存在,否則 方法會將傳回 DateTime 值從UTC轉換為當地時間,並將其 Kind 屬性設定為 DateTimeKind.Local。 |
NoCurrentDateDefault | 如果 s 包含沒有日期資訊的時間,則傳回值的日期會設定為 DateTime.MinValue.Date 。 |
None | 使用預設值剖析 s 參數。 不允許在 format 中存在的空格符。 如果 s 缺少日期元件,傳回 DateTime 值的日期會設定為 1/1/0001。 如果 s 不包含時區資訊,則傳回 DateTime 物件的 Kind 屬性會設定為 DateTimeKind.Unspecified。 如果時區資訊存在於 s 中,則會將時間轉換成當地時間,且傳回 DateTime 物件的 Kind 屬性會設定為 DateTimeKind.Local。 |
RoundtripKind | 針對包含時區資訊的字串,嘗試防止轉換成 DateTime 值,其 Kind 屬性設定為 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
中所包含日期和時間的 DateTime 值,如果轉換失敗,則 DateTime.MinValue。 如果 s
或 formats
是 null
、s
或 formats
的 元素是空字串,或 s
的格式不完全如 formats
中的其中一個格式模式所指定,則轉換會失敗。 這個參數會未初始化傳遞。
傳回
如果已成功轉換 s
參數,true
;否則,false
。
例外狀況
範例
下列範例會使用 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
參數只包含一個時間和沒有日期,除非 style
參數包含 DateTimeStyles.NoCurrentDateDefault 旗標,否則會使用目前的日期,在此情況下會使用預設日期(DateTime.Date.MinValue
)。 如果 s
參數只包含日期且沒有時間,則會使用午夜 (00:00:00:00) 。
style
參數也會判斷 s
參數是否可包含前置、內部或尾端空格符,而 formats
中其中一個格式字串所允許的空格符。
如果 s
不包含時區資訊,則傳回 DateTime 物件的 Kind 屬性會 DateTimeKind.Unspecified。 您可以使用 DateTimeStyles.AssumeLocal 旗標來變更此行為,這個旗標會傳回 Kind 屬性為 DateTimeKind.Local的 DateTime 值,或使用 DateTimeStyles.AssumeUniversal 和 DateTimeStyles.AdjustToUniversal 旗標,傳回 Kind 屬性為 DateTimeKind.Utc的 DateTime 值。 如果 s 包含時區資訊,則會視需要將時間轉換成當地時間,且傳回 DateTime 物件的 Kind 屬性會設定為 DateTimeKind.Local。 您可以使用 DateTimeStyles.RoundtripKind 旗標將國際標準時間 (UTC) 轉換成當地時間,並將 Kind 屬性設定為 DateTimeKind.Utc來變更此行為。
formats
參數包含模式陣列,其中一個 s
在剖析作業成功時必須完全相符。
formats
參數中的模式包含 自定義日期和時間格式字元串 數據表中的一或多個自定義格式規範,或從 標準日期和時間格式字元串 數據表識別預先定義的模式規範。
如果您未在自定義格式模式中使用日期或時間分隔符,請使用 provider
參數的不變異文化特性,以及每個自定義格式規範的最寬格式。 例如,如果您想要在模式中指定時數,請指定較寬的窗體 「HH」,而不是較窄的表單 「H」。。
s
中使用的特定日期和時間符號和字串(例如特定語言中星期幾的名稱)是由 provider
參數所定義,如同 format
是標準格式規範字元串時 s
的精確格式。
provider
參數可以是下列任一項:
CultureInfo 物件,表示用來解譯
s
的文化特性。 DateTimeFormat 屬性所傳回的 DateTimeFormatInfo 物件會定義s
中的符號和格式。定義日期和時間數據格式的 DateTimeFormatInfo 物件。
自訂 IFormatProvider 實作,其 GetFormat 方法會傳回 CultureInfo 物件或提供格式資訊的 DateTimeFormatInfo 物件。
如果 provider
是 null
,則會使用對應至目前文化特性的 CultureInfo 物件。
styles
參數包含一或多個 DateTimeStyles 列舉成員,可判斷 format
未定義的空格符是否會出現在 s
中,以及控制剖析作業的精確行為。 下表描述 DateTimeStyles 列舉的每個成員如何影響 TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) 方法的作業。
DateTimeStyles 成員 | 描述 |
---|---|
AdjustToUniversal | 剖析 s ,並視需要將其轉換成 UTC。 如果 s 包含時區位移,或者如果 s 不包含時區資訊,但 styles 包含 DateTimeStyles.AssumeLocal 旗標,則方法會剖析字串、呼叫 ToUniversalTime 將傳回 DateTime 值轉換為 UTC,並將 Kind 屬性設定為 DateTimeKind.Utc。 如果 s 表示 UTC,或者如果 s 不包含時區資訊,但 styles 包含 DateTimeStyles.AssumeUniversal 旗標,則方法會剖析字串、對傳回 DateTime 值執行時區轉換,並將 Kind 屬性設定為 DateTimeKind.Utc。 在其他所有情況下,旗標沒有任何作用。 |
AllowInnerWhite | 指定 format 未定義的空格元可以出現在任何個別的日期或時間元素之間。 |
AllowLeadingWhite | 指定 format 未定義的空格符會出現在 s 開頭。 |
AllowTrailingWhite | 指定 format 未定義的空格符會出現在 s 結尾。 |
AllowWhiteSpaces | 指定 s 可能包含 format 未定義的前置、內部和尾端空格符。 |
AssumeLocal | 指定如果 s 缺少任何時區資訊,則會假設它代表當地時間。 除非 DateTimeStyles.AdjustToUniversal 旗標存在,否則傳回 DateTime 值的 Kind 屬性會設定為 DateTimeKind.Local。 |
AssumeUniversal | 指定如果 s 缺少任何時區資訊,則會假設它代表UTC。 除非 DateTimeStyles.AdjustToUniversal 旗標存在,否則 方法會將傳回 DateTime 值從UTC轉換為當地時間,並將其 Kind 屬性設定為 DateTimeKind.Local。 |
NoCurrentDateDefault | 如果 s 包含沒有日期資訊的時間,則傳回值的日期會設定為 DateTime.MinValue.Date 。 |
None | 使用預設值剖析 s 參數。 不允許在 format 中存在的空格符。 如果 s 缺少日期元件,傳回 DateTime 值的日期會設定為 1/1/0001。 如果 s 不包含時區資訊,則傳回 DateTime 物件的 Kind 屬性會設定為 DateTimeKind.Unspecified。 如果時區資訊存在於 s 中,則會將時間轉換成當地時間,且傳回 DateTime 物件的 Kind 屬性會設定為 DateTimeKind.Local。 |
RoundtripKind | 針對包含時區資訊的字串,嘗試防止轉換成 DateTime 值,其 Kind 屬性設定為 DateTimeKind.Local。 此旗標主要可防止將UTC時間轉換成當地時間。 |
給呼叫者的注意事項
在 .NET Framework 4 中,如果要剖析的字串包含一小時元件和未同意的 AM/PM 指示項,則 TryParseExact 方法會傳回 false
。 在 .NET Framework 3.5 和舊版中,會忽略AM/PM指示項。