共用方式為


剖析日期和時間字串

剖析方法會將代表日期和時間的字串轉換為相等的 DateTime 物件。ParseTryParse 方法會轉換日期和時間的幾個常見表示法。ParseExactTryParseExact 方法會轉換完全符合日期和時間格式字串所指定之模式的字串表示。

剖析會受到格式提供者之屬性的影響 (格式提供者會提供類似用於日期和時間分隔符號的字串以及月份、日期和年代名稱等資訊)。格式提供者是目前的 DateTimeFormatInfo 物件,該物件是由目前執行緒的文化特性以隱含方式提供,或是由剖析方法的 IFormatProvider 參數明確提供。請針對 IFormatProvider 參數指定 CultureInfo 物件,該物件表示文化特性或 DateTimeFormatInfo 物件。

將進行剖析之日期的字串表示必須包含月份,而且至少要包含日期或年份。時間的字串表示必須包含小時,而且至少要包含分鐘或 AM/PM 指示項。不過,剖析可為省略的元件提供預設值 (可能的話)。遺漏的日期預設為目前的日期、遺漏的年份預設為目前的年份、遺漏的月份日期預設為該月份的第一天,而遺漏的時間則預設為午夜時間。

如果字串表示只有指定時間,則剖析作業會傳回 DateTime 物件,而且該物件的 YearMonthDay 屬性會設定為 Today 屬性的對應值。不過,如果 NoCurrentDateDefault 常數是在剖析方法內指定,則產生的年份、月份和日期屬性會設定為 1 的值。

如果時間的字串表示內省略了時區,則剖析會傳回 DateTime 物件,而且它的 Kind 屬性會設定為 Unspecified。如果指定了時區,例如,時區的位移為 "-07:00",則剖析會傳回 DateTime 物件,而它的 Kind 屬性會設定為 Local,而且它的值會調整為電腦的當地時區。您可以使用具有剖析方法的 DateTimeStyles 常數來修改這項行為。

格式提供者也可用於解譯模稜兩可的數值日期,例如,由字串 "02/03/04" 表示的日期元件很難區分哪一個是月份、日期和年份。在此情況下,會根據格式提供者內類似日期格式的順序來解譯元件。

Parse

下列程式碼範例說明如何使用 Parse 方法,將字串轉換成 DateTime。這個範例會使用和目前執行緒關聯的文化特性來執行剖析。如果和目前文化特性關聯的 CultureInfo 無法剖析輸入字串,便會擲回 FormatException

Dim MyString As String = "Jan 1, 2002"
Dim MyDateTime As DateTime = DateTime.Parse(MyString)
Console.WriteLine(MyDateTime)
string MyString = "Jan 1, 2002";
DateTime MyDateTime = DateTime.Parse(MyString);
Console.WriteLine(MyDateTime);

您也可以指定將 CultureInfo 設定為該物件所定義的其中一個文化特性。下列程式碼範例會使用格式提供者,將德文字串剖析為 DateTime。它會定義代表 de-DE 文化特性的 CultureInfo 物件並傳遞正在剖析的字串,確保能成功剖析這個特定的字串。這將會排除 CurrentThreadCurrentCulture 的任何設定。

Imports System.Globalization

Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2002"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo)
Console.WriteLine(MyDateTime)
using System.Globalization;

CultureInfo MyCultureInfo = new CultureInfo("de-DE");
string MyString = "12 Juni 2002";
DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);
Console.WriteLine(MyDateTime);

下列程式碼範例會使用 DateTimeStyles 列舉型別,指定不要將目前的日期和時間資訊加入 DateTime 物件中字串未定義的欄位中。

Imports System.Globalization

Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2002"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo, DateTimeStyles.NoCurrentDateDefault)
Console.WriteLine(MyDateTime)
using System.Globalization;

CultureInfo MyCultureInfo = new CultureInfo("de-DE");
string MyString = "12 Juni 2002";
DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo, DateTimeStyles.NoCurrentDateDefault);
Console.WriteLine(MyDateTime);

ParseExact

ParseExact 方法只會將指定的字串模式轉換成 DateTime。將非指定格式的字串傳遞至這個方法時,便會擲回 FormatException。您可以指定其中一個標準的日期和時間格式規範或自訂日期和時間格式規範的有限組合。如果使用自訂格式規範,您便可以建構自訂辨識字串。如需規範的說明,請參閱有關日期和時間格式字串的章節。

在下列程式碼範例中,會將要剖析的字串物件傳遞至 ParseExact 方法,接著依序傳遞的是格式規範和 CultureInfo 物件。這個 ParseExact 方法只能剖析具有 EN-US 文化特性中長日期模式的字串。

Imports System.Globalization

Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US")
Dim MyString As String = "Tuesday, April 10, 2001"
Dim MyDateTime As DateTime = DateTime.ParseExact(MyString, "D", MyCultureInfo)
Console.WriteLine(MyDateTime)
using System.Globalization;

CultureInfo MyCultureInfo = new CultureInfo("en-US");
string MyString = " Tuesday, April 10, 2001";
DateTime MyDateTime = DateTime.ParseExact(MyString, "D", MyCultureInfo);
Console.WriteLine(MyDateTime);

請參閱

其他資源

剖析字串
格式化型別
轉換型別