本文提供此 API 參考文件的補充備註。
方法 DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) 會剖析可包含日期、時間和時區資訊的字串。 它類似於DateTime.Parse(String, IFormatProvider, DateTimeStyles)方法,不同之處在於,如果轉換失敗,DateTime.TryParse(String, DateTime)方法不會擲回例外狀況。
此方法會嘗試忽略無法辨識的數據,並完全剖析輸入字串 (s)。 如果 s 包含時間但沒有日期,則方法預設會取代目前的日期,或者,如果 styles 包含 NoCurrentDateDefault 旗標,則會取代 DateTime.Date.MinValue。 如果 s 包含日期,但沒有時間,則會使用 12:00 午夜做為預設時間。 如果日期存在,但其年份元件只包含兩位數,則會根據provider屬性的值,將其轉換為Calendar.TwoDigitYearMax參數目前行事曆中的年份。 中 s 任何前置、內部或尾端空格符皆會被忽略。 日期和時間可以加上一對開頭和尾端的「NUMBER SIGN」字元(‘#’,U+0023),而且可以加上一或多個「NULL」字元(U+0000)。
日期和時間元素的特定有效格式,以及日期和時間中使用的名稱和符號,是由 provider 參數所定義,它可以是下列任一項:
-
CultureInfo物件,表示在 參數中使用
s其格式的文化特性。 DateTimeFormatInfo 屬性所傳回的 CultureInfo.DateTimeFormat 物件定義了s中使用的格式設定。 -
DateTimeFormatInfo對象,定義 中
s所使用的格式設定。 - 自定義 IFormatProvider 實作。 其 IFormatProvider.GetFormat 方法會傳回一個 DateTimeFormatInfo 物件,該物件定義了在
s中使用的格式設定。
如果 provider 為 null,則會使用目前的文化特性。
如果 s 是目前日曆中閏年之閏日字串表示法,則方法會成功剖析 s 。 如果 s 是在當前行事曆 provider 中非閏年中的閏日字串表示,則解析操作會失敗,並回傳 false。
參數 styles 會定義剖析字串的精確解譯,以及剖析作業應該如何處理它。 它可以是列舉的 DateTimeStyles 一或多個成員,如下表所述。
| DateTimeStyles 成員 | 說明 |
|---|---|
| AdjustToUniversal | 視需要剖析 s ,並將它轉換成UTC。 如果 s 包含時區位移,或如果 s 不包含時區資訊,但 styles 包含 DateTimeStyles.AssumeLocal 旗標,則方法會剖析字串、呼叫 ToUniversalTime 將傳 DateTime 回的值轉換為 UTC,並將 屬性設定 Kind 為 DateTimeKind.Utc。 如果 s 表示它代表 UTC,或者如果 s 不包含時區資訊,但 styles 包含 DateTimeStyles.AssumeUniversal 旗標,則方法會剖析字串、在傳 DateTime 回的值上不執行時區轉換,並將 屬性設定 Kind 為 DateTimeKind.Utc。 在其他所有情況下,旗標沒有任何作用。 |
| AllowInnerWhite | 雖然有效,但會忽略此值。 允許在 s 的日期和時間元素中使用內部空白。 |
| AllowLeadingWhite | 雖然有效,但會忽略此值。 允許在 的 s日期和時間元素中使用前置空格符。 |
| AllowTrailingWhite | 雖然有效,但會忽略此值。 的日期和時間元素 s中允許尾端空格符。 |
| AllowWhiteSpaces | 指定表示 s 可能包含開頭、內部和尾端的空格符。 此為預設行為。 它無法藉由提供更嚴格的 DateTimeStyles 列舉值來取代,例如 DateTimeStyles.None。 |
| AssumeLocal | 指定如果 s 缺少任何時區資訊,則會假設它代表當地時間。 除非DateTimeStyles.AdjustToUniversal旗標存在,否則傳回值的Kind屬性會設定為DateTime。 |
| AssumeUniversal | 指定如果 s 缺少任何時區資訊,則會假設它代表 UTC。 除非DateTimeStyles.AdjustToUniversal旗標存在,否則方法會將DateTime返回的值從 UTC 轉換為當地時間,並將其Kind屬性設定為DateTimeKind.Local。 |
| None | 雖然有效,但會忽略此值。 |
| RoundtripKind | 針對包含時區資訊的字串,嘗試防止將日期和時間字串 DateTime 轉換成值,其 Kind 屬性設定為 DateTimeKind.Local。 一般而言,這類字串是使用 「o」、“r” 或 “u” 標準格式規範呼叫 DateTime.ToString(String) 方法所建立。 |
如果s不包含時區資訊,則DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime)方法會傳回一個DateTime值,其Kind屬性為DateTimeKind.Unspecified,除非styles旗標另有指示。 如果 s 包含時區或時區位移資訊,此方法 DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) 會執行任何必要的時間轉換,並傳回下列其中一項:
- DateTime值,其日期和時間會反映當地時間,其 Kind 屬性為 DateTimeKind.Local。
- 或者,如果
styles包含 AdjustToUniversal 標誌,則 DateTime 的值,日期和時間會反映 UTC,且其 Kind 屬性為 DateTimeKind.Utc。
您可以使用 DateTimeStyles.RoundtripKind 標誌來覆寫此行為。
剖析自定義文化特性
如果您剖析針對自定義文化特性產生的日期和時間字串,請使用 TryParseExact 方法,而不是 TryParse 方法來改善剖析作業成功的可能性。 自定義文化特性日期和時間字串可能很複雜且難以剖析。 方法 TryParse 會嘗試剖析具有數個隱含剖析模式的字串,這一切可能會失敗。 相反地,方法 TryParseExact 會要求您明確指定一或多個可能成功的確切剖析模式。
如需自定義文化特性的詳細資訊,請參閱 類別 System.Globalization.CultureAndRegionInfoBuilder 。