DateTime.Parse 方法

定義

將日期和時間的字串表示,轉換為其相等的 DateTimeConverts the string representation of a date and time to its DateTime equivalent.

多載

Parse(String)

使用目前執行緒文化特性的慣例,將日期和時間的字串表示轉換為其相等的 DateTimeConverts the string representation of a date and time to its DateTime equivalent by using the conventions of the current thread culture.

Parse(String, IFormatProvider)

使用特定文化特性格式資訊,將日期和時間的字串表示轉換為其相等的 DateTimeConverts the string representation of a date and time to its DateTime equivalent by using culture-specific format information.

Parse(ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles)

使用文化特定格式資訊及格式化樣式,將包含日期與時間字串表示的記憶體範圍轉換成相等 DateTimeConverts a memory span that contains string representation of a date and time to its DateTime equivalent by using culture-specific format information and a formatting style.

Parse(String, IFormatProvider, DateTimeStyles)

使用特定文化特性格式資訊及格式樣式,將日期和時間的字串表示轉換為其相等的 DateTimeConverts the string representation of a date and time to its DateTime equivalent by using culture-specific format information and a formatting style.

範例

許多呼叫 DateTime.Parse 方法的範例,都是在本文的「備註」一節中,以及個別 DateTime.Parse 多載的檔中。Numerous examples that call the DateTime.Parse method are interspersed throughout the Remarks section of this article and in the documentation for the individual DateTime.Parse overloads.

注意

此文章中的某些 C# 範例會在 Try.NET 內嵌程式碼執行器和測試區執行。Some C# examples in this article run in the Try.NET inline code runner and playground. 選取 [執行] 按鈕以在互動式視窗中執行範例。Select the Run button to run an example in an interactive window. 執行程式碼之後,您便可以修改它,並再選取一次 [執行] 來執行修改過的程式碼。Once you execute the code, you can modify it and run the modified code by selecting Run again. 修改過的程式碼會在互動式視窗中執行,或是如果編譯失敗的話,互動式視窗會顯示所有 C# 編譯器錯誤訊息。The modified code either runs in the interactive window or, if compilation fails, the interactive window displays all C# compiler error messages.

Try.NET 內嵌程式碼執行器與 Playground 的當地時區是全球標準時間 (UTC)。The local time zone of the Try.NET inline code runner and playground is Coordinated Universal Time, or UTC. 這可能會影響示範 DateTimeDateTimeOffsetTimeZoneInfo 型別與其成員之範例的行為與輸出。This may affect the behavior and the output of examples that illustrate the DateTime, DateTimeOffset, and TimeZoneInfo types and their members.

您也可以從dotnet/samples GitHub 存放庫下載一組完整的 DateTime.Parse 範例(包含在的.net core 2.0 專案C# 中)和適用于 Visual Basic 的.net core 2.0 專案You can also download a complete set of DateTime.Parse examples, which are included in a .NET Core 2.0 project for C# and a .NET Core 2.0 project for Visual Basic, from the dotnet/samples GitHub repository.

備註

本節內容:In this section:

我要呼叫哪個方法?Which method do I call?

To CallCall
使用目前文化特性的慣例來剖析日期和時間字串。Parse a date and time string by using the conventions of the current culture. Parse(String) 多載Parse(String) overload
使用特定文化特性的慣例來剖析日期和時間字串。Parse a date and time string by using the conventions of a specific culture. Parse(String, IFormatProvider) 多載(請參閱剖析和文化特性慣例Parse(String, IFormatProvider) overload (see Parsing and Cultural Conventions)
使用特殊樣式專案剖析日期和時間字串(例如空白字元或不含空白字元)。Parse a date and time string with special style elements (such as white space or no white space). Parse(String, IFormatProvider, DateTimeStyles) 多載Parse(String, IFormatProvider, DateTimeStyles) overload
剖析必須是特定格式的日期和時間字串。Parse a date and time string that must be in a particular format. DateTime.ParseExactDateTime.TryParseExactDateTime.ParseExact or DateTime.TryParseExact
剖析日期和時間字串,並執行 UTC 或當地時間的轉換。Parse a date and time string and perform a conversion to UTC or local time. Parse(String, IFormatProvider, DateTimeStyles) 多載Parse(String, IFormatProvider, DateTimeStyles) overload
剖析日期和時間字串,而不處理例外狀況。Parse a date and time string without handling exceptions. DateTime.TryParse 方法DateTime.TryParse method
還原(來回)格式化作業所建立的日期和時間值。Restore (round-trip) a date and time value created by a formatting operation. 將 "o" 或 "r" 標準格式字串傳遞給 ToString(String) 方法,並使用 DateTimeStyles.RoundtripKind 呼叫 Parse(String, IFormatProvider, DateTimeStyles) 多載Pass the "o" or "r" standard format string to the ToString(String) method, and call the Parse(String, IFormatProvider, DateTimeStyles) overload with DateTimeStyles.RoundtripKind
剖析固定格式的日期和時間字串,跨電腦(和可能的文化特性)界限。Parse a date and time string in a fixed format across machine (and possibly cultural) boundaries. DateTime.ParseExactDateTime.TryParseExact 方法DateTime.ParseExact or DateTime.TryParseExact method

要剖析的字串The string to parse

Parse 方法會嘗試將日期和時間值的字串表示,轉換為其相等的 DateTimeThe Parse method tries to convert the string representation of a date and time value to its DateTime equivalent. 它會嘗試完全剖析輸入字串,而不擲回 FormatException 例外狀況。It tries to parse the input string completely without throwing a FormatException exception.

重要

如果剖析作業因為無法辨識的字串格式而失敗,則 Parse 方法會擲回 FormatException,而 TryParse 方法會傳回 falseIf the parsing operation fails because of an unrecognized string format, the Parse method throws a FormatException, whereas the TryParse method returns false. 因為例外狀況處理可能會很耗費資源,所以當剖析作業預期會成功時,您應該使用 Parse,因為輸入來源是受信任的。Because exception handling can be expensive, you should use Parse when the parsing operation is expected to succeed because the input source is trusted. 當剖析失敗很可能,特別是因為輸入來源不受信任,或者您有合理的預設值來取代未成功剖析的字串時,最好使用 TryParseTryParse is preferable when parsing failures are likely, particularly because an input source is not trusted, or you have reasonable default values to substitute for strings that do not parse successfully.

要剖析的字串可以採用下列任何形式:The string to be parsed can take any of the following forms:

  • 含有日期和時間元件的字串。A string with a date and a time component.

  • 具有日期但沒有時間元件的字串。A string with a date but no time component. 如果時間元件不存在,此方法會假設為午夜12:00。If the time component is absent, the method assumes 12:00 midnight. 如果日期元件有兩位數的年份,則會根據目前文化特性目前行事曆的 Calendar.TwoDigitYearMax 或指定文化特性的目前行事曆(如果您使用多載搭配非 null 的 provider 引數),轉換成一年。If the date component has a two-digit year, it is converted to a year based on the Calendar.TwoDigitYearMax of the current culture's current calendar or the specified culture's current calendar (if you use an overload with a non-null provider argument).

  • 具有日期元件的字串,其中僅包含月份和年份,但不含日元件。A string with a date component that includes only the month and the year but no day component. 方法會假設該月份的第一天。The method assumes the first day of the month.

  • 具有日期元件的字串,其中僅包含月份和日,但不含 year 元件。A string with a date component that includes only the month and the day but no year component. 方法會假設目前的年份。The method assumes the current year.

  • 具有時間但沒有日期元件的字串。A string with a time but no date component. 除非您呼叫 Parse(String, IFormatProvider, DateTimeStyles) 多載,並在 styles 引數中包含 DateTimeStyles.NoCurrentDateDefault,否則方法會假設目前的日期,在此情況下,方法會假設日期為0001年1月1日。The method assumes the current date unless you call the Parse(String, IFormatProvider, DateTimeStyles) overload and include DateTimeStyles.NoCurrentDateDefault in the styles argument, in which case the method assumes a date of January 1, 0001.

  • 包含時間元件的字串,其中僅包含小時和 AM/PM 指示項,沒有日期元件。A string with a time component that includes only the hour and an AM/PM designator, with no date component. 方法會假設目前的日期和時間沒有分鐘,而不是秒。The method assumes the current date and a time with no minutes and no seconds. 您可以藉由呼叫 Parse(String, IFormatProvider, DateTimeStyles) 多載並在 styles 引數中包含 DateTimeStyles.NoCurrentDateDefault 來變更此行為,在此情況下,方法會假設日期為0001年1月1日。You can change this behavior by calling the Parse(String, IFormatProvider, DateTimeStyles) overload and include DateTimeStyles.NoCurrentDateDefault in the styles argument, in which case the method assumes a date of January 1, 0001.

  • 包含時區資訊並符合 ISO 8601 的字串。A string that includes time zone information and conforms to ISO 8601. 在下列範例中,第一個字串會指定國際標準時間(UTC),第二個則會指定時區中早于 UTC 7 小時的時間:In the following examples, the first string designates Coordinated Universal Time (UTC), and the second designates the time in a time zone that's seven hours earlier than UTC:

    「2008-11-01T19:35: 00.0000000 Z」"2008-11-01T19:35:00.0000000Z"
    「2008-11-01T19:35: 00.0000000-07:00」"2008-11-01T19:35:00.0000000-07:00"

  • 包含 GMT 指示項並符合 RFC 1123 時間格式的字串。例如:A string that includes the GMT designator and conforms to the RFC 1123 time format; for example:

    「Sat,01年11月 2008 19:35:00 GMT」"Sat, 01 Nov 2008 19:35:00 GMT"

  • 包含日期和時間以及時區時差資訊的字串。例如:A string that includes the date and time along with time zone offset information; for example:

    "03/01/2009 05:42:00-5:00""03/01/2009 05:42:00 -5:00"

下列範例會使用目前文化特性的格式化慣例(在此案例中為 en-us 文化特性),來剖析其中每一種格式的字串:The following example parses strings in each of these formats by using the formatting conventions of the current culture, which in this case is the en-US culture:

using System;

public class Example
{
   public static void Main()
   {
      (string dateAsString, string description)[]  dateInfo = { ("08/18/2018 07:22:16", "String with a date and time component"),                             
                                                                ("08/18/2018", "String with a date component only"),
                                                                ("8/2018", "String with a month and year component only"),
                                                                ("8/18", "String with a month and day component only"),
                                                                ("07:22:16", "String with a time component only"),
                                                                ("7 PM", "String with an hour and AM/PM designator only"),
                                                                ("2018-08-18T07:22:16.0000000Z", "UTC string that conforms to ISO 8601"),   
                                                                ("2018-08-18T07:22:16.0000000-07:00", "Non-UTC string that conforms to ISO 8601"),
                                                                ("Sat, 18 Aug 2018 07:22:16 GMT", "String that conforms to RFC 1123"),
                                                                ("08/18/2018 07:22:16 -5:00", "String with date, time, and time zone information" ) };
   
      Console.WriteLine($"Today is {DateTime.Now:d}\n");
      
      foreach (var item in dateInfo) {
         Console.WriteLine($"{item.description + ":",-52} '{item.dateAsString}' --> {DateTime.Parse(item.dateAsString)}");        
      }
   }
}
// The example displays output like the following:
//   Today is 2/22/2018
//   
//   String with a date and time component:               '08/18/2018 07:22:16' --> 8/18/2018 7:22:16 AM
//   String with a date component only:                   '08/18/2018' --> 8/18/2018 12:00:00 AM
//   String with a month and year component only:         '8/2018' --> 8/1/2018 12:00:00 AM
//   String with a month and day component only:          '8/18' --> 8/18/2018 12:00:00 AM
//   String with a time component only:                   '07:22:16' --> 2/22/2018 7:22:16 AM
//   String with an hour and AM/PM designator only:       '7 PM' --> 2/22/2018 7:00:00 PM
//   UTC string that conforms to ISO 8601:                '2018-08-18T07:22:16.0000000Z' --> 8/18/2018 12:22:16 AM
//   Non-UTC string that conforms to ISO 8601:            '2018-08-18T07:22:16.0000000-07:00' --> 8/18/2018 7:22:16 AM
//   String that conforms to RFC 1123:                    'Sat, 18 Aug 2018 07:22:16 GMT' --> 8/18/2018 12:22:16 AM
//   String with date, time, and time zone information:   '08/18/2018 07:22:16 -5:00' --> 8/18/2018 5:22:16 AM


Public Module Strings
   Public Sub Main()
      Dim dateInfo() As (dateAsString As String, description As String) = 
                     { ("08/18/2018 07:22:16", "String with a date and time component"),
                       ("08/18/2018", "String with a date component only"),
                       ("8/2018", "String with a month and year component only"),
                       ("8/18", "String with a month and day component only"),
                       ("07:22:16", "String with a time component only"),
                       ("7 PM", "String with an hour and AM/PM designator only"),
                       ("2018-08-18T07:22:16.0000000Z", "UTC string that conforms to ISO 8601"),   
                       ("2018-08-18T07:22:16.0000000-07:00", "Non-UTC string that conforms to ISO 8601"),
                       ("Sat, 18 Aug 2018 07:22:16 GMT", "String that conforms to RFC 1123"),
                       ("08/18/2018 07:22:16 -5:00", "String with date, time, and time zone information" ) }
   
      Console.WriteLine($"Today is {Date.Now:d}{vbCrLf}")
      
      For Each item in dateInfo
         Console.WriteLine($"{item.description + ":",-52} '{item.dateAsString}' --> {DateTime.Parse(item.dateAsString)}")        
      Next
   End Sub
End Module
' The example displays output like the following:
'   Today is 2/22/2018
'   
'   String with a date and time component:               '08/18/2018 07:22:16' --> 8/18/2018 7:22:16 AM
'   String with a date component only:                   '08/18/2018' --> 8/18/2018 12:00:00 AM
'   String with a month and year component only:         '8/2018' --> 8/1/2018 12:00:00 AM
'   String with a month and day component only:          '8/18' --> 8/18/2018 12:00:00 AM
'   String with a time component only:                   '07:22:16' --> 2/22/2018 7:22:16 AM
'   String with an hour and AM/PM designator only:       '7 PM' --> 2/22/2018 7:00:00 PM
'   UTC string that conforms to ISO 8601:                '2018-08-18T07:22:16.0000000Z' --> 8/18/2018 12:22:16 AM
'   Non-UTC string that conforms to ISO 8601:            '2018-08-18T07:22:16.0000000-07:00' --> 8/18/2018 7:22:16 AM
'   String that conforms to RFC 1123:                    'Sat, 18 Aug 2018 07:22:16 GMT' --> 8/18/2018 12:22:16 AM
'   String with date, time, and time zone information:   '08/18/2018 07:22:16 -5:00' --> 8/18/2018 5:22:16 AM

如果輸入字串代表在剖析方法所使用之行事曆的閏年中的閏年(請參閱剖析和文化特性慣例),Parse 方法就會成功剖析字串。If the input string represents a leap day in a leap year in the calendar used by the parsing method (see Parsing and cultural conventions), the Parse method parses the string successfully. 如果輸入字串代表非閏年中的閏日,則方法會擲回 FormatExceptionIf the input string represents a leap day in a non-leap year, the method throws a FormatException.

因為 Parse 方法會嘗試使用目前或指定之文化特性的格式規則來剖析日期和時間的字串表示,所以嘗試跨不同文化特性剖析字串可能會失敗。Because the Parse method tries to parse the string representation of a date and time by using the formatting rules of the current or a specified culture, trying to parse a string across different cultures can fail. 若要跨不同的地區設定來剖析特定日期和時間格式,請使用 DateTime.ParseExact 方法的其中一個多載,並提供格式規範。To parse a specific date and time format across different locales, use one of the overloads of the DateTime.ParseExact method and provide a format specifier.

剖析和文化特性慣例Parsing and cultural conventions

除非要剖析的字串(由下表中的 s 表示)符合 ISO 8601 模式,否則 Parse 方法的所有多載都區分文化特性。All overloads of the Parse method are culture-sensitive unless the string to be parsed (which is represented by s in the following table) conforms to the ISO 8601 pattern. 剖析作業會使用衍生的 DateTimeFormatInfo 物件中的格式資訊,如下所示:The parsing operation uses the formatting information in a DateTimeFormatInfo object that is derived as follows:

重要

日本曆法的紀元是以天皇的統治為基礎,因此有變更是正常的。Eras in the Japanese calendars are based on the emperor's reign and are therefore expected to change. 例如,2019 年 5 月 1 日之後,JapaneseCalendarJapaneseLunisolarCalendar 中將開始使用「令和」。For example, May 1, 2019 marked the beginning of the Reiwa era in the JapaneseCalendar and JapaneseLunisolarCalendar. 此變更對使用這些日曆的所有應用程式都有影響。Such a change of era affects all applications that use these calendars. 若要取得詳細資訊及判斷您的應用程式是否受影響,請參閱 Handling a new era in the Japanese calendar in .NET (處理 .NET 中日本日曆的新紀元)。See Handling a new era in the Japanese calendar in .NET for more information and to determine whether your applications are affected. 若要了解如何在 Windows 系統上測試您的應用程式,確保其已準備好面對紀元變更,請參閱 Prepare your application for the Japanese era change (讓應用程式準備好因應日本紀元變更)。See Prepare your application for the Japanese era change for information on testing your applications on Windows systems to ensure their readiness for the era change. 請參閱使用紀年以了解 .NET 中支援使用多種紀年的日曆,以及在處理支援多種紀年的日曆時能採用最佳做法。See Working with eras for features in .NET that support calendars with multiple eras and for best practices when working with calendars that support multiple eras.

如果您呼叫If you call providerAnd provider is 格式設定資訊衍生自Formatting information is derived from
Parse(String) - 目前的執行緒文化特性(DateTimeFormatInfo.CurrentInfo 屬性)The current thread culture (DateTimeFormatInfo.CurrentInfo property)
Parse(String, IFormatProvider)Parse(String, IFormatProvider, DateTimeStyles)Parse(String, IFormatProvider) or Parse(String, IFormatProvider, DateTimeStyles) DateTimeFormatInfo 物件a DateTimeFormatInfo object 指定的 DateTimeFormatInfo 物件The specified DateTimeFormatInfo object
Parse(String, IFormatProvider)Parse(String, IFormatProvider, DateTimeStyles)Parse(String, IFormatProvider) or Parse(String, IFormatProvider, DateTimeStyles) null 目前的執行緒文化特性(DateTimeFormatInfo.CurrentInfo 屬性)The current thread culture (DateTimeFormatInfo.CurrentInfo property)
Parse(String, IFormatProvider)Parse(String, IFormatProvider, DateTimeStyles)Parse(String, IFormatProvider) or Parse(String, IFormatProvider, DateTimeStyles) CultureInfo 物件a CultureInfo object CultureInfo.DateTimeFormat 屬性The CultureInfo.DateTimeFormat property
Parse(String, IFormatProvider)Parse(String, IFormatProvider, DateTimeStyles)Parse(String, IFormatProvider) or Parse(String, IFormatProvider, DateTimeStyles) 自訂 IFormatProvider 的執行Custom IFormatProvider implementation IFormatProvider.GetFormat 方法The IFormatProvider.GetFormat method

當格式資訊衍生自 DateTimeFormatInfo 物件時,DateTimeFormatInfo.Calendar 屬性會定義用於剖析作業的行事曆。When formatting information is derived from a DateTimeFormatInfo object, the DateTimeFormatInfo.Calendar property defines the calendar used in the parsing operation.

如果您使用 DateTimeFormatInfo 物件來剖析日期和時間字串,且其自訂設定與標準文化特性不同,則請使用 ParseExact 方法來取代 Parse 方法,以改善成功轉換的機會。If you parse a date and time string by using a DateTimeFormatInfo object with customized settings that are different from those of a standard culture, use the ParseExact method instead of the Parse method to improve the chances for a successful conversion. 非標準日期和時間字串可能很複雜且難以剖析。A non-standard date and time string can be complicated and difficult to parse. Parse 方法會嘗試使用數個隱含剖析模式來剖析字串,這兩者都可能會失敗。The Parse method tries to parse a string with several implicit parse patterns, all of which might fail. 相反地,ParseExact 方法會要求您明確指定一或多個可能成功的確切剖析模式。In contrast, the ParseExact method requires you to explicitly designate one or more exact parse patterns that are likely to succeed. 如需詳細資訊,請參閱 DateTimeFormatInfo 主題中的「DateTimeFormatInfo 和動態資料」一節。For more information, see the "DateTimeFormatInfo and Dynamic Data" section in the DateTimeFormatInfo topic.

重要

請注意,特定文化特性的格式設定慣例是動態的,而且可能會有所變更。Note that the formatting conventions for a particular culture are dynamic and can be subject to change. 這表示,如果發生下列任何一種情況,則根據預設(目前)文化特性的格式化慣例或指定 IFormatProvider 物件(代表不因文化特性而異的文化特性)的剖析作業,可能會意外失敗:This means that parsing operations that depend on the formatting conventions of the default (current) culture or that specify an IFormatProvider object that represents a culture other than the invariant culture can unexpectedly fail if any of the following occurs:

  • 特定文化特性的資料在 .NET Framework 的主要或次要版本之間已變更,或與現有 .NET Framework 版本的更新結果相同。The culture-specific data has changed between major or minor versions of the .NET Framework or as the result of an update to the existing version of the .NET Framework.
  • 文化特性特有的資料會反映使用者喜好設定,這可能會因電腦或會話而異。The culture-specific data reflects user preferences, which can vary from machine to machine or session to session.
  • 文化特性特有的資料代表取代文化特性,它會覆寫標準文化特性或自訂文化特性的設定。The culture-specific data represents a replacement culture that overrides the settings of a standard culture or a custom culture.

若要避免剖析與文化特性資料中的變更相關聯之資料和時間字串的困難,您可以使用不因文化特性而異的方式來剖析日期和時間字串,或者可以呼叫 ParseExactTryParseExact 方法,並指定要剖析之字串的確切格式。To prevent the difficulties in parsing data and time strings that are associated with changes in cultural data, you can parse date and time strings by using the invariant culture, or you can call the ParseExact or TryParseExact method and specify the exact format of the string to be parsed. 如果您要序列化和還原序列化日期和時間資料,可以使用不因文化特性而異的格式設定慣例,或者可以序列化和還原序列化二進位格式的 DateTime 值。If you are serializing and deserializing date and time data, you can either use the formatting conventions of the invariant culture, or you can serialize and deserialize the DateTime value in a binary format.

如需詳細資訊,請參閱 CultureInfo 主題中的「動態文化特性資料」一節和 DateTime 主題中的「保存日期時間值」一節。For more information see the "Dynamic culture data" section in the CultureInfo topic and the "Persisting DateTime values" section in the DateTime topic.

剖析和樣式元素Parsing and style elements

所有 Parse 多載會忽略輸入字串中的前置、內部或尾端空白字元(以下表中的 s 表示)。All Parse overloads ignore leading, inner, or trailing white-space characters in the input string (which is represented by s in the following table). 日期和時間可以用一對開頭和尾端數位記號字元("#"、U + 0023)括住,而且可以使用一或多個 Null 字元(U + 0000)來 trailed。The date and time can be bracketed with a pair of leading and trailing NUMBER SIGN characters ("#", U+0023), and can be trailed with one or more NULL characters (U+0000).

此外,Parse(String, IFormatProvider, DateTimeStyles) 多載具有 styles 參數,其中包含一或多個 DateTimeStyles 列舉的成員。In addition, the Parse(String, IFormatProvider, DateTimeStyles) overload has a styles parameter that consists of one or more members of the DateTimeStyles enumeration. 這個參數會定義應該如何解讀 s,以及剖析作業應如何將 s 轉換成日期和時間。This parameter defines how s should be interpreted and how the parse operation should convert s to a date and time. 下表描述每個 DateTimeStyles 成員對剖析作業的影響。The following table describes the effect of each DateTimeStyles member on the parse operation.

DateTimeStyles 成員DateTimeStyles member 轉換時的影響Effect on conversion
AdjustToUniversal 剖析 s,並在必要時將它轉換成 UTC,如下所示:Parses s and, if necessary, converts it to UTC, as follows:

-如果 s 包含時區時差,或 s 不包含時區資訊,但 styles 包含 AssumeLocal 旗標,則方法會剖析字串、呼叫 ToUniversalTime 以將傳回的 DateTime 值轉換成 UTC,並將 Kind 屬性設定為 DateTimeKind.Utc- If s includes a time zone offset, or if s contains no time zone information but styles includes the AssumeLocal flag, the method parses the string, calls ToUniversalTime to convert the returned DateTime value to UTC, and sets the Kind property to DateTimeKind.Utc.
-如果 s 表示它代表 UTC,或者 s 不包含時區資訊,但 styles 包含 AssumeUniversal 旗標,則方法會剖析字串,並在傳回的 DateTime 值上不執行任何時區轉換,並將 Kind 屬性設定為 [DateTimeKind.Utc]。- If s indicates that it represents UTC, or if s does not contain time zone information but styles includes the AssumeUniversal flag, the method parses the string, performs no time zone conversion on the returned DateTime value, and sets the Kind property to DateTimeKind.Utc.
-在所有其他情況下,旗標沒有任何作用。- In all other cases, the flag has no effect.
AllowInnerWhite 這個值會被忽略。This value is ignored. s的日期和時間元素中一律允許內部空白字元。Inner white space is always permitted in the date and time elements of s.
AllowLeadingWhite 這個值會被忽略。This value is ignored. s的日期和時間元素中一律允許前置空白字元。Leading white space is always permitted in the date and time elements of s.
AllowTrailingWhite 這個值會被忽略。This value is ignored. s的日期和時間元素中一律允許尾端空白字元。Trailing white space is always permitted in the date and time elements of s.
AllowWhiteSpaces 指定 s 可能包含前置、內部和尾端空白字元。Specifies that s may contain leading, inner, and trailing white spaces. 這是預設行為。This is the default behavior. 您無法藉由提供更嚴格的 DateTimeStyles 列舉值(例如 None)來覆寫它。It cannot be overridden by supplying a more restrictive DateTimeStyles enumeration value such as None.
AssumeLocal 指定如果 s 缺少任何時區資訊,則會假設為當地時間。Specifies that if s lacks any time zone information, local time is assumed. 除非出現 AdjustToUniversal 旗標,否則傳回的 DateTime 值的 Kind 屬性會設定為 DateTimeKind.LocalUnless the AdjustToUniversal flag is present, the Kind property of the returned DateTime value is set to DateTimeKind.Local.
AssumeUniversal 指定如果 s 缺少任何時區資訊,則會假設為 UTC。Specifies that if s lacks any time zone information, UTC is assumed. 除非出現 AdjustToUniversal 旗標,否則方法會將傳回的 DateTime 值從 UTC 轉換為當地時間,並將其 Kind 屬性設定為 DateTimeKind.LocalUnless the AdjustToUniversal flag is present, the method converts the returned DateTime value from UTC to local time and sets its Kind property to DateTimeKind.Local.
None 雖然有效,但會忽略這個值。Although valid, this value is ignored.
RoundtripKind 對於包含時區資訊的字串,會嘗試防止將日期和時間字串轉換為代表當地時間的 DateTime 值,其 Kind 屬性設定為 DateTimeKind.LocalFor strings that contain time zone information, tries to prevent the conversion of a date and time string to a DateTime value that represents a local time with its Kind property set to DateTimeKind.Local. 一般來說,這類字串是藉由呼叫 DateTime.ToString(String) 方法以及使用 "o"、"r" 或 "u" 標準格式規範來建立。Typically, such a string is created by calling the DateTime.ToString(String) method and by using the "o", "r", or "u" standard format specifier.

傳回值和 DateTime 種類The return value and DateTime.Kind

DateTime.Parse 多載會傳回 DateTime 值,其 Kind 屬性包含時區資訊。The DateTime.Parse overloads return a DateTime value whose Kind property includes time zone information. 這可能表示時間為:It can indicate that the time is:

一般來說,Parse 方法會傳回其 Kind 屬性 DateTimeKind.UnspecifiedDateTime 物件。Generally, the Parse method returns a DateTime object whose Kind property is DateTimeKind.Unspecified. 不過,Parse 方法也可能會執行時區轉換,並根據 sstyles 參數的值,以不同的方式設定 Kind 屬性的值:However, the Parse method may also perform time zone conversion and set the value of the Kind property differently, depending on the values of the s and styles parameters:

如果If 時區轉換Time zone conversion Kind 屬性Kind property
s 包含時區資訊。s contains time zone information. 日期和時間會轉換成當地時區的時間。The date and time is converted to the time in the local time zone. DateTimeKind.Local
s 包含時區資訊,styles 包含 AdjustToUniversal 旗標。s contains time zone information, and styles includes the AdjustToUniversal flag. 日期和時間會轉換成國際標準時間(UTC)。The date and time is converted to Coordinated Universal Time (UTC). DateTimeKind.Utc
s 包含 Z 或 GMT 時區指示項,styles 包含 RoundtripKind 旗標。s contains the Z or GMT time zone designator, and styles includes the RoundtripKind flag. 日期和時間會以 UTC 的形式轉譯。The date and time are interpreted as UTC. DateTimeKind.Utc

下列範例會將包含時區資訊的日期字串,轉換為當地時區的時間:The following example converts date strings that contain time zone information to the time in the local time zone:

using System;

public class Example
{
   public static void Main()
   {
      string[] dateStrings = {"2008-05-01T07:34:42-5:00", 
                              "2008-05-01 7:34:42Z", 
                              "Thu, 01 May 2008 07:34:42 GMT"};
      foreach (string dateString in dateStrings)
      {
         DateTime convertedDate = DateTime.Parse(dateString);
         Console.WriteLine($"Converted {dateString} to {convertedDate.Kind} time {convertedDate}");
      }                              
   }
}
// These calls to the DateTime.Parse method display the following output:
//  Converted 2008-05-01T07:34:42-5:00 to Local time 5/1/2008 5:34:42 AM
//  Converted 2008-05-01 7:34:42Z to Local time 5/1/2008 12:34:42 AM
//  Converted Thu, 01 May 2008 07:34:42 GMT to Local time 5/1/2008 12:34:42 AM                                             
Module Example
   Public Sub Main()
      Dim dateStrings() As String = {"2008-05-01T07:34:42-5:00", 
                                     "2008-05-01 7:34:42Z", 
                                     "Thu, 01 May 2008 07:34:42 GMT"}
      
      For Each dateStr In dateStrings
         Dim convertedDate As Date = Date.Parse(dateStr)
         Console.WriteLine($"Converted {dateStr} to {convertedDate.Kind} time {convertedDate}")
      Next 
   End Sub
End Module
' These calls to the DateTime.Parse method display the following output:
'   Converted 2008-05-01T07:34:42-5:00 to Local time 5/1/2008 5:34:42 AM
'   Converted 2008-05-01 7:34:42Z to Local time 5/1/2008 12:34:42 AM
'   Converted Thu, 01 May 2008 07:34:42 GMT to Local time 5/1/2008 12:34:42 AM                                             

您也可以使用 DateTimeStyles.RoundtripKind 旗標,在格式化和剖析作業期間保留日期和時間的 Kind 屬性值。You can also preserve the value of a date and time's Kind property during a formatting and parsing operation by using the DateTimeStyles.RoundtripKind flag. 下列範例說明如何使用 "o"、"r" 或 "u" 格式規範,對轉換成字串的 DateTime 值,RoundtripKind 旗標影響剖析作業。The following example illustrates how the RoundtripKind flag affects the parsing operation on DateTime values that are converted to strings by using the "o", "r", or "u" format specifier.

   string[] formattedDates = { "2008-09-15T09:30:41.7752486-07:00", 
                               "2008-09-15T09:30:41.7752486Z",  
                               "2008-09-15T09:30:41.7752486",  
                               "2008-09-15T09:30:41.7752486-04:00", 
                               "Mon, 15 Sep 2008 09:30:41 GMT" };
   foreach (string formattedDate in formattedDates)
   {
      Console.WriteLine(formattedDate);
      DateTime roundtripDate = DateTime.Parse(formattedDate, null, 
                                              DateTimeStyles.RoundtripKind);                        
      Console.WriteLine($"   With RoundtripKind flag: {roundtripDate} {roundtripDate.Kind} time.");
   
      DateTime noRoundtripDate = DateTime.Parse(formattedDate, null, 
                                                DateTimeStyles.None);
      Console.WriteLine($"   Without RoundtripKind flag: {noRoundtripDate} {noRoundtripDate.Kind} time.");
   }         
// The example displays the following output:
//       2008-09-15T09:30:41.7752486-07:00
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Local time.
//          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Local time.
//       2008-09-15T09:30:41.7752486Z
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Utc time.
//          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.
//       2008-09-15T09:30:41.7752486
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
//          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
//       2008-09-15T09:30:41.7752486-04:00
//          With RoundtripKind flag: 9/15/2008 6:30:41 AM Local time.
//          Without RoundtripKind flag: 9/15/2008 6:30:41 AM Local time.
//       Mon, 15 Sep 2008 09:30:41 GMT
//          With RoundtripKind flag: 9/15/2008 9:30:41 AM Utc time.
//          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.      
Dim formattedDates() = { "2008-09-15T09:30:41.7752486-07:00", 
                           "2008-09-15T09:30:41.7752486Z",  
                           "2008-09-15T09:30:41.7752486",  
                           "2008-09-15T09:30:41.7752486-04:00", 
                           "Mon, 15 Sep 2008 09:30:41 GMT" }
For Each formattedDate In formattedDates
   Console.WriteLine(formattedDate)
   Dim roundtripDate = DateTime.Parse(formattedDate, Nothing,  
                                      DateTimeStyles.RoundtripKind)                        
   Console.WriteLine($"   With RoundtripKind flag: {roundtripDate} {roundtripDate.Kind} time.")                                          
   Dim noRoundtripDate = DateTime.Parse(formattedDate, Nothing,                                                                                                  DateTimeStyles.None)
   Console.WriteLine($"   Without RoundtripKind flag: {noRoundtripDate} {noRoundtripDate.Kind} time.")
Next         
' The example displays the following output:
'       2008-09-15T09:30:41.7752486-07:00
'          With RoundtripKind flag: 9/15/2008 9:30:41 AM Local time.
'          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Local time.
'       2008-09-15T09:30:41.7752486Z
'          With RoundtripKind flag: 9/15/2008 9:30:41 AM Utc time.
'          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.
'       2008-09-15T09:30:41.7752486
'          With RoundtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
'          Without RoundtripKind flag: 9/15/2008 9:30:41 AM Unspecified time.
'       2008-09-15T09:30:41.7752486-04:00
'          With RoundtripKind flag: 9/15/2008 6:30:41 AM Local time.
'          Without RoundtripKind flag: 9/15/2008 6:30:41 AM Local time.
'       Mon, 15 Sep 2008 09:30:41 GMT
'          With RoundtripKind flag: 9/15/2008 9:30:41 AM Utc time.
'          Without RoundtripKind flag: 9/15/2008 2:30:41 AM Local time.      

Parse(String)

使用目前執行緒文化特性的慣例,將日期和時間的字串表示轉換為其相等的 DateTimeConverts the string representation of a date and time to its DateTime equivalent by using the conventions of the current thread culture.

public:
 static DateTime Parse(System::String ^ s);
public static DateTime Parse (string s);
static member Parse : string -> DateTime
Public Shared Function Parse (s As String) As DateTime

參數

s
String

字串,包含要轉換的日期和時間。A string that contains a date and time to convert. 如需詳細資訊,請參閱要剖析的字串See The string to parse for more information.

傳回

物件,與 s 中包含的日期和時間相等。An object that is equivalent to the date and time contained in s.

例外狀況

snulls is null.

s 不包含日期與時間的有效字串表示。s does not contain a valid string representation of a date and time.

備註

如果 s 包含時區資訊,這個方法會傳回 DateTime 值,其 Kind 屬性為 DateTimeKind.Local,並將 s 中的日期和時間轉換為本地時間。If s contains time zone information, this method returns a DateTime value whose Kind property is DateTimeKind.Local and converts the date and time in s to local time. 否則,它不會執行時區轉換,並且會傳回其 Kind 屬性 DateTimeKind.UnspecifiedDateTime 值。Otherwise, it performs no time zone conversion and returns a DateTime value whose Kind property is DateTimeKind.Unspecified.

這個多載會嘗試使用目前文化特性的格式化慣例來剖析 sThis overload attempts to parse s by using the formatting conventions of the current culture. 目前的文化特性是以 CurrentCulture 屬性來表示。The current culture is indicated by the CurrentCulture property. 若要使用特定文化特性的格式化慣例來剖析字串,請呼叫 Parse(String, IFormatProvider)Parse(String, IFormatProvider, DateTimeStyles) 多載。To parse a string using the formatting conventions of a specific culture, call the Parse(String, IFormatProvider) or the Parse(String, IFormatProvider, DateTimeStyles) overloads.

這個多載會嘗試使用 DateTimeStyles.AllowWhiteSpaces 樣式來剖析 sThis overload attempts to parse s by using DateTimeStyles.AllowWhiteSpaces style.

範例Example

下列範例會透過下列方式來剖析數個日期和時間值的字串表示:The following example parses the string representation of several date and time values by:

  • 使用預設格式提供者,提供用來產生範例輸出之電腦的目前線程文化特性的格式化慣例。Using the default format provider, which provides the formatting conventions of the current thread culture of the computer used to produce the example output. 此範例的輸出會反映 en-us 文化特性的格式設定慣例。The output from this example reflects the formatting conventions of the en-US culture.

  • 使用預設的樣式值,這是 AllowWhiteSpacesUsing the default style value, which is AllowWhiteSpaces.

它會處理當方法嘗試使用其他文化特性的格式設定慣例來剖析日期和時間的字串表示時,所擲回的 FormatException 例外狀況。It handles the FormatException exception that is thrown when the method tries to parse the string representation of a date and time by using some other culture's formatting conventions. 它也會顯示如何成功剖析不使用目前線程文化特性之格式化慣例的日期和時間值。It also shows how to successfully parse a date and time value that does not use the formatting conventions of the current thread culture.

using System;
using System.Globalization;

public class DateTimeParser
{
   public static void Main()
   {
      // Assume the current culture is en-US. 
      // The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.

      // Use standard en-US date and time value
      DateTime dateValue;
      string dateString = "2/16/2008 12:15:12 PM";
      try {
         dateValue = DateTime.Parse(dateString);
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
      }   
      catch (FormatException) {
         Console.WriteLine("Unable to convert '{0}'.", dateString);
      }
            
      // Reverse month and day to conform to the fr-FR culture.
      // The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.
      dateString = "16/02/2008 12:15:12";
      try {
         dateValue = DateTime.Parse(dateString);
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
      }   
      catch (FormatException) {
         Console.WriteLine("Unable to convert '{0}'.", dateString);
      }

      // Call another overload of Parse to successfully convert string
      // formatted according to conventions of fr-FR culture.      
      try {
         dateValue = DateTime.Parse(dateString, new CultureInfo("fr-FR", false));
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
      }   
      catch (FormatException) {
         Console.WriteLine("Unable to convert '{0}'.", dateString);
      }
      
      // Parse string with date but no time component.
      dateString = "2/16/2008";
      try {
         dateValue = DateTime.Parse(dateString);
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
      }   
      catch (FormatException) {
         Console.WriteLine("Unable to convert '{0}'.", dateString);
      }   
   }
}
// The example displays the following output to the console:
//       '2/16/2008 12:15:12 PM' converted to 2/16/2008 12:15:12 PM.
//       Unable to convert '16/02/2008 12:15:12'.
//       '16/02/2008 12:15:12' converted to 2/16/2008 12:15:12 PM.
//       '2/16/2008' converted to 2/16/2008 12:00:00 AM.
Imports System.Globalization

Class DateTimeParser
   Public Shared Sub Main()
      ' Assume the current culture is en-US. 
      ' The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.

      ' Use standard en-US date and time value
      Dim dateValue As Date
      Dim dateString As String = "2/16/2008 12:15:12 PM"
      Try
         dateValue = Date.Parse(dateString)
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", dateString)
      End Try
            
      ' Reverse month and day to conform to the fr-FR culture.
      ' The date is February 16, 2008, 12 hours, 15 minutes and 12 seconds.
      dateString = "16/02/2008 12:15:12"
      Try
         dateValue = Date.Parse(dateString)
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", dateString)
      End Try

      ' Call another overload of Parse to successfully convert string
      ' formatted according to conventions of fr-FR culture.      
      Try
         dateValue = Date.Parse(dateString, New CultureInfo("fr-FR", False))
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", dateString)
      End Try
      
      ' Parse string with date but no time component.
      dateString = "2/16/2008"
      Try
         dateValue = Date.Parse(dateString)
         Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue)
      Catch e As FormatException
         Console.WriteLine("Unable to convert '{0}'.", dateString)
      End Try
   End Sub 
End Class 
' The example displays the following output to the console:
'       '2/16/2008 12:15:12 PM' converted to 2/16/2008 12:15:12 PM.
'       Unable to convert '16/02/2008 12:15:12'.
'       '16/02/2008 12:15:12' converted to 2/16/2008 12:15:12 PM.
'       '2/16/2008' converted to 2/16/2008 12:00:00 AM.

另請參閱

Parse(String, IFormatProvider)

使用特定文化特性格式資訊,將日期和時間的字串表示轉換為其相等的 DateTimeConverts the string representation of a date and time to its DateTime equivalent by using culture-specific format information.

public:
 static DateTime Parse(System::String ^ s, IFormatProvider ^ provider);
public static DateTime Parse (string s, IFormatProvider provider);
static member Parse : string * IFormatProvider -> DateTime
Public Shared Function Parse (s As String, provider As IFormatProvider) As DateTime

參數

s
String

字串,包含要轉換的日期和時間。A string that contains a date and time to convert. 如需詳細資訊,請參閱要剖析的字串See The string to parse for more information.

provider
IFormatProvider

提供關於 s 之特定文化特性格式資訊的物件。An object that supplies culture-specific format information about s. 請參閱剖析和文化特性慣例See Parsing and cultural conventions

傳回

物件,與 s 中包含的日期和時間相等,如 provider 所指定。An object that is equivalent to the date and time contained in s as specified by provider.

例外狀況

snulls is null.

s 不包含日期與時間的有效字串表示。s does not contain a valid string representation of a date and time.

備註

如果 s 包含時區資訊,這個方法會傳回 DateTime 值,其 Kind 屬性為 DateTimeKind.Local,並將 s 中的日期和時間轉換為本地時間。If s contains time zone information, this method returns a DateTime value whose Kind property is DateTimeKind.Local and converts the date and time in s to local time. 否則,它不會執行時區轉換,並且會傳回其 Kind 屬性 DateTimeKind.UnspecifiedDateTime 值。Otherwise, it performs no time zone conversion and returns a DateTime value whose Kind property is DateTimeKind.Unspecified.

這個多載會嘗試使用 DateTimeStyles.AllowWhiteSpaces 樣式來剖析 sThis overload attempts to parse s by using the DateTimeStyles.AllowWhiteSpaces style.

範例Example

下列範例會使用 en-us、fr-fr 和 de 文化特性的慣例,來剖析日期字串的陣列。The following example parses an array of date strings by using the conventions of the en-US, fr-FR, and de-DE cultures. 它會示範單一日期的字串標記法在不同文化特性中的解讀方式不同。It demonstrates that the string representations of a single date can be interpreted differently across different cultures.

using System;
using System.Globalization;

public class ParseDate
{
   public static void Main()
   {
      // Define cultures to be used to parse dates.
      CultureInfo[] cultures = {CultureInfo.CreateSpecificCulture("en-US"), 
                                CultureInfo.CreateSpecificCulture("fr-FR"), 
                                CultureInfo.CreateSpecificCulture("de-DE")};
      // Define string representations of a date to be parsed.
      string[] dateStrings = {"01/10/2009 7:34 PM", 
                              "10.01.2009 19:34", 
                              "10-1-2009 19:34" };
      // Parse dates using each culture.
      foreach (CultureInfo culture in cultures)
      {
         DateTime dateValue;
         Console.WriteLine("Attempted conversions using {0} culture.", 
                           culture.Name);
         foreach (string dateString in dateStrings)
         {
            try {
               dateValue = DateTime.Parse(dateString, culture);
               Console.WriteLine("   Converted '{0}' to {1}.",
                                 dateString, dateValue.ToString("f", culture));
            }
            catch (FormatException) {
               Console.WriteLine("   Unable to convert '{0}' for culture {1}.", 
                                 dateString, culture.Name);
            }
         }
         Console.WriteLine();
      }                                                                                     
   }
}
// The example displays the following output to the console:
//       Attempted conversions using en-US culture.
//          Converted '01/10/2009 7:34 PM' to Saturday, January 10, 2009 7:34 PM.
//          Converted '10.01.2009 19:34' to Thursday, October 01, 2009 7:34 PM.
//          Converted '10-1-2009 19:34' to Thursday, October 01, 2009 7:34 PM.
//       
//       Attempted conversions using fr-FR culture.
//          Converted '01/10/2009 7:34 PM' to jeudi 1 octobre 2009 19:34.
//          Converted '10.01.2009 19:34' to samedi 10 janvier 2009 19:34.
//          Converted '10-1-2009 19:34' to samedi 10 janvier 2009 19:34.
//       
//       Attempted conversions using de-DE culture.
//          Converted '01/10/2009 7:34 PM' to Donnerstag, 1. Oktober 2009 19:34.
//          Converted '10.01.2009 19:34' to Samstag, 10. Januar 2009 19:34.
//          Converted '10-1-2009 19:34' to Samstag, 10. Januar 2009 19:34.
Imports System.Globalization

Module ParseDate
   Public Sub Main()
      ' Define cultures to be used to parse dates.
      Dim cultures() As CultureInfo = {CultureInfo.CreateSpecificCulture("en-US"), _
                                       CultureInfo.CreateSpecificCulture("fr-FR"), _
                                       CultureInfo.CreateSpecificCulture("de-DE")}
      ' Define string representations of a date to be parsed.
      Dim dateStrings() As String = {"01/10/2009 7:34 PM", _
                                     "10.01.2009 19:34", _
                                     "10-1-2009 19:34" }
      ' Parse dates using each culture.
      For Each culture In cultures
         Dim dateValue As Date
         Console.WriteLine("Attempted conversions using {0} culture.", culture.Name)
         For Each dateString As String In dateStrings
            Try
               dateValue = Date.Parse(dateString, culture)
               Console.WriteLine("   Converted '{0}' to {1}.", _
                                 dateString, dateValue.ToString("f", culture))
            Catch e As FormatException
               Console.WriteLine("   Unable to convert '{0}' for culture {1}.", _
                                 dateString, culture.Name)
            End Try                                                
         Next
         Console.WriteLine()
      Next                                                                                     
   End Sub
End Module
' The example displays the following output to the console:
'       Attempted conversions using en-US culture.
'          Converted '01/10/2009 7:34 PM' to Saturday, January 10, 2009 7:34 PM.
'          Converted '10.01.2009 19:34' to Thursday, October 01, 2009 7:34 PM.
'          Converted '10-1-2009 19:34' to Thursday, October 01, 2009 7:34 PM.
'       
'       Attempted conversions using fr-FR culture.
'          Converted '01/10/2009 7:34 PM' to jeudi 1 octobre 2009 19:34.
'          Converted '10.01.2009 19:34' to samedi 10 janvier 2009 19:34.
'          Converted '10-1-2009 19:34' to samedi 10 janvier 2009 19:34.
'       
'       Attempted conversions using de-DE culture.
'          Converted '01/10/2009 7:34 PM' to Donnerstag, 1. Oktober 2009 19:34.
'          Converted '10.01.2009 19:34' to Samstag, 10. Januar 2009 19:34.
'          Converted '10-1-2009 19:34' to Samstag, 10. Januar 2009 19:34.

另請參閱

Parse(ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles)

使用文化特定格式資訊及格式化樣式,將包含日期與時間字串表示的記憶體範圍轉換成相等 DateTimeConverts a memory span that contains string representation of a date and time to its DateTime equivalent by using culture-specific format information and a formatting style.

public static DateTime Parse (ReadOnlySpan<char> s, IFormatProvider provider = null, System.Globalization.DateTimeStyles styles = System.Globalization.DateTimeStyles.None);
static member Parse : ReadOnlySpan<char> * IFormatProvider * System.Globalization.DateTimeStyles -> DateTime
Public Shared Function Parse (s As ReadOnlySpan(Of Char), Optional provider As IFormatProvider = null, Optional styles As DateTimeStyles = System.Globalization.DateTimeStyles.None) As DateTime

參數

s
ReadOnlySpan<Char>

包含要剖析字串的記憶體範圍。The memory span that contains the string to parse. 如需詳細資訊,請參閱要剖析的字串See The string to parse for more information.

provider
IFormatProvider

提供關於 s 之特定文化特性格式資訊的物件。An object that supplies culture-specific format information about s. 請參閱剖析和文化特性慣例See Parsing and cultural conventions

styles
DateTimeStyles

列舉值的位元組合,表示可以在 s 中出現使剖析作業成功,以及定義如何解譯剖析的日期與目前時區或目前日期之間關聯性的樣式項目。A bitwise combination of the enumeration values that indicates the style elements that can be present in s for the parse operation to succeed, and that defines how to interpret the parsed date in relation to the current time zone or the current date. 一般會指定的值是 NoneA typical value to specify is None.

傳回

物件,與 s 中包含的日期和時間相等,如 providerstyles 所指定。An object that is equivalent to the date and time contained in s, as specified by provider and styles.

例外狀況

s 不包含日期與時間的有效字串表示。s does not contain a valid string representation of a date and time.

styles 包含 DateTimeStyles 值的無效組合。styles contains an invalid combination of DateTimeStyles values. 如需範例,請參閱 AssumeLocalAssumeUniversalFor example, both AssumeLocal and AssumeUniversal.

Parse(String, IFormatProvider, DateTimeStyles)

使用特定文化特性格式資訊及格式樣式,將日期和時間的字串表示轉換為其相等的 DateTimeConverts the string representation of a date and time to its DateTime equivalent by using culture-specific format information and a formatting style.

public:
 static DateTime Parse(System::String ^ s, IFormatProvider ^ provider, System::Globalization::DateTimeStyles styles);
public static DateTime Parse (string s, IFormatProvider provider, System.Globalization.DateTimeStyles styles);
static member Parse : string * IFormatProvider * System.Globalization.DateTimeStyles -> DateTime
Public Shared Function Parse (s As String, provider As IFormatProvider, styles As DateTimeStyles) As DateTime

參數

s
String

字串,包含要轉換的日期和時間。A string that contains a date and time to convert. 如需詳細資訊,請參閱要剖析的字串See The string to parse for more information.

provider
IFormatProvider

物件,提供關於 s 的特定文化特性格式資訊。An object that supplies culture-specific formatting information about s. 請參閱剖析和文化特性慣例See Parsing and cultural conventions

styles
DateTimeStyles

列舉值的位元組合,表示可以在 s 中出現使剖析作業成功,以及定義如何解譯剖析的日期與目前時區或目前日期之間關聯性的樣式項目。A bitwise combination of the enumeration values that indicates the style elements that can be present in s for the parse operation to succeed, and that defines how to interpret the parsed date in relation to the current time zone or the current date. 一般會指定的值是 NoneA typical value to specify is None.

傳回

物件,與 s 中包含的日期和時間相等,如 providerstyles 所指定。An object that is equivalent to the date and time contained in s, as specified by provider and styles.

例外狀況

snulls is null.

s 不包含日期與時間的有效字串表示。s does not contain a valid string representation of a date and time.

styles 包含 DateTimeStyles 值的無效組合。styles contains an invalid combination of DateTimeStyles values. 如需範例,請參閱 AssumeLocalAssumeUniversalFor example, both AssumeLocal and AssumeUniversal.

備註

這個方法多載會在 s 中轉換日期和時間,並設定所傳回 DateTime 值的 Kind 屬性,如下所示:This method overload converts the date and time in s and sets the Kind property of the returned DateTime value as follows:

如果If 時區轉換Time zone conversion Kind 屬性Kind property
s 不包含時區資訊。s contains no time zone information. 無。None. DateTimeKind.Unspecified
s 包含時區資訊。s contains time zone information. 到當地時區的時間To the time in the local time zone DateTimeKind.Local
s 包含時區資訊,styles 包含 DateTimeStyles.AdjustToUniversal 旗標。s contains time zone information, and styles includes the DateTimeStyles.AdjustToUniversal flag. 至國際標準時間(UTC)To Coordinated Universal Time (UTC) DateTimeKind.Utc
s 包含 Z 或 GMT 時區指示項,styles 包含 DateTimeStyles.RoundtripKinds contains the Z or GMT time zone designator, and styles includes the DateTimeStyles.RoundtripKind. 無。None. DateTimeKind.Utc

範例Example

下列範例示範 Parse(String, IFormatProvider, DateTimeStyles) 方法,並顯示所產生 DateTime 值的 Kind 屬性值。The following example demonstrates the Parse(String, IFormatProvider, DateTimeStyles) method and displays the value of the Kind property of the resulting DateTime values.

using System;
using System.Globalization;

public class ParseDateExample
{
   public static void Main()
   {
      string dateString;
      CultureInfo culture ;
      DateTimeStyles styles;
      DateTime result;
      
      // Parse a date and time with no styles.
      dateString = "03/01/2009 10:00 AM";
      culture = CultureInfo.CreateSpecificCulture("en-US");
      styles = DateTimeStyles.None;
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.", 
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.", 
                           dateString);
      }      
      
      // Parse the same date and time with the AssumeLocal style.
      styles = DateTimeStyles.AssumeLocal;
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.", 
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
      }      
      
      // Parse a date and time that is assumed to be local.
      // This time is five hours behind UTC. The local system's time zone is 
      // eight hours behind UTC.
      dateString = "2009/03/01T10:00:00-5:00";
      styles = DateTimeStyles.AssumeLocal;
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.", 
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
      }      
      
      // Attempt to convert a string in improper ISO 8601 format.
      dateString = "03/01/2009T10:00:00-5:00";
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.", 
                           dateString, result, result.Kind.ToString());
      }                     
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
      }      

      // Assume a date and time string formatted for the fr-FR culture is the local 
      // time and convert it to UTC.
      dateString = "2008-03-01 10:00";
      culture = CultureInfo.CreateSpecificCulture("fr-FR");
      styles = DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeLocal;
      try {
         result = DateTime.Parse(dateString, culture, styles);
         Console.WriteLine("{0} converted to {1} {2}.", 
                           dateString, result, result.Kind.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString);
      }      
   }
}
// The example displays the following output to the console:
//       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Unspecified.
//       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Local.
//       2009/03/01T10:00:00-5:00 converted to 3/1/2009 7:00:00 AM Local.
//       Unable to convert 03/01/2009T10:00:00-5:00 to a date and time.
//       2008-03-01 10:00 converted to 3/1/2008 6:00:00 PM Utc.
Imports System.Globalization

Module ParseDateExample
   Public Sub Main()
      Dim dateString As String  
      Dim culture As CultureInfo
      Dim styles As DateTimeStyles 
      Dim result As DateTime
      
      ' Parse a date and time with no styles.
      dateString = "03/01/2009 10:00 AM"
      culture = CultureInfo.CreateSpecificCulture("en-US")
      styles = DateTimeStyles.None
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try      
      
      ' Parse the same date and time with the AssumeLocal style.
      styles = DateTimeStyles.AssumeLocal
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try      
      
      ' Parse a date and time that is assumed to be local.
      ' This time is five hours behind UTC. The local system's time zone is 
      ' eight hours behind UTC.
      dateString = "2009/03/01T10:00:00-5:00"
      styles = DateTimeStyles.AssumeLocal
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try      
      
      ' Attempt to convert a string in improper ISO 8601 format.
      dateString = "03/01/2009T10:00:00-5:00"
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try      

      ' Assume a date and time string formatted for the fr-FR culture is the local 
      ' time and convert it to UTC.
      dateString = "2008-03-01 10:00"
      culture = CultureInfo.CreateSpecificCulture("fr-FR")
      styles = DateTimeStyles.AdjustToUniversal Or DateTimeStyles.AssumeLocal
      Try
         result = DateTime.Parse(dateString, culture, styles)
         Console.WriteLine("{0} converted to {1} {2}.", _
                           dateString, result, result.Kind.ToString())
      Catch e As FormatException
         Console.WriteLine("Unable to convert {0} to a date and time.", dateString)
      End Try      
   End Sub
End Module
'
' The example displays the following output to the console:
'       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Unspecified.
'       03/01/2009 10:00 AM converted to 3/1/2009 10:00:00 AM Local.
'       2009/03/01T10:00:00-5:00 converted to 3/1/2009 7:00:00 AM Local.
'       Unable to convert 03/01/2009T10:00:00-5:00 to a date and time.
'       2008-03-01 10:00 converted to 3/1/2008 6:00:00 PM Utc.

另請參閱

適用於