共用方式為


剖析日期和時間字串

更新:2007 年 11 月

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

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

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

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

除了日期與時間元件外,日期與時間的字串表示包含一個位移,指示和 Coordinated Universal Time (UTC) 的時差有多久。例如,字串 "2/14/2007 5:32:00 -7:00" 所定義的時間,比 UTC 早七個小時。如時間的字串表示中省略了位移,剖析會傳回一個 DateTime 物件,且物件的 Kind 屬性會設定為 DateTimeKind.Unspecified。如果指定了位移,則剖析會傳回 DateTime 物件,Kind 屬性則是設定為 Local,而且值會調整成您的電腦的當地時區。您可以使用具有剖析方法的 DateTimeStyles 常數來修改這項行為。

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

Parse

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

Dim MyString As String = "Jan 1, 2009"
Dim MyDateTime As DateTime = DateTime.Parse(MyString)
Console.WriteLine(MyDateTime)
' Displays the following output on a system whose culture is en-US:
'       1/1/2009 12:00:00 AM
string MyString = "Jan 1, 2009";
DateTime MyDateTime = DateTime.Parse(MyString);
Console.WriteLine(MyDateTime);
// Displays the following output on a system whose culture is en-US:
//       1/1/2009 12:00:00 AM

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

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
      Dim MyString As String = "12 Juni 2008"
      Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo)
      Console.WriteLine(MyDateTime)
   End Sub
End Module
' The example displays the following output:
'       6/12/2008 12:00:00 AM
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo MyCultureInfo = new CultureInfo("de-DE");
      string MyString = "12 Juni 2008";
      DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);
      Console.WriteLine(MyDateTime);
   }
}
// The example displays the following output:
//       6/12/2008 12:00:00 AM

但是,雖然您可以使用 Parse 方法的多載以指定自訂格式提供者,這個方法並不支援使用非標準的格式提供者。如果要剖析以非標準格式表示的日期與時間,請使用 ParseExact 方法。

下列程式碼範例會使用 DateTimeStyles 列舉型別,指定不應該將目前的日期和時間資訊,新增至字串未定義的欄位之 DateTime

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim MyCultureInfo As CultureInfo = new CultureInfo("de-DE")
      Dim MyString As String = "12 Juni 2008"
      Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo, _
                                   DateTimeStyles.NoCurrentDateDefault)
      Console.WriteLine(MyDateTime)
   End Sub
End Module
' The example displays the following output if the current culture is en-US:
'       6/12/2008 12:00:00 AM
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo MyCultureInfo = new CultureInfo("de-DE");
      string MyString = "12 Juni 2008";
      DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo, 
                                           DateTimeStyles.NoCurrentDateDefault);
      Console.WriteLine(MyDateTime);
   }
}
// The example displays the following output if the current culture is en-US:
//      6/12/2008 12:00:00 AM

ParseExact

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

ParseExact 方法的每一個多載也都有一個 IFormatProvider 參數,會提供與字串的格式相關的文化特性特定資訊。通常,這個 IFormatProvider 物件是一個代表標準文化特性的 CultureInfo 物件,或是由 CultureInfo.DateTimeFormat 屬性所傳回的 DateTimeFormatInfo 物件。但是,不同於其他日期與時間剖析函式之處在於,這個方法也支援定義非標準日期與時間格式的 IFormatProvider

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

Imports System.Globalization

Module Example
   Public Sub Main()
      Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US")
      Dim MyString() As String = {" Friday, April 10, 2009", "Friday, April 10, 2009"}
      For Each dateString As String In MyString
         Try
            Dim MyDateTime As DateTime = DateTime.ParseExact(dateString, "D", _
                                                             MyCultureInfo)
            Console.WriteLine(MyDateTime)
         Catch e As FormatException
            Console.WriteLine("Unable to parse '{0}'", dateString)
         End Try
      Next
   End Sub
End Module
' The example displays the following output:
'       Unable to parse ' Friday, April 10, 2009'
'       4/10/2009 12:00:00 AM
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo MyCultureInfo = new CultureInfo("en-US");
      string[] MyString = {" Friday, April 10, 2009", "Friday, April 10, 2009"};
      foreach (string dateString in MyString)
      {
         try {
            DateTime MyDateTime = DateTime.ParseExact(dateString, "D", MyCultureInfo);
            Console.WriteLine(MyDateTime);
         }
         catch (FormatException) {
            Console.WriteLine("Unable to parse '{0}'", dateString);
         }
      }
   }
}
// The example displays the following output:
//       Unable to parse ' Friday, April 10, 2009'
//       4/10/2009 12:00:00 AM

請參閱

其他資源

剖析字串

格式化型別

轉換型別