DateTime.Parse メソッド

定義

日付と時刻の文字列形式を等価の DateTime に変換します。

オーバーロード

Parse(String)

現在のスレッド カルチャの書式規則を使用して、日付と時刻の文字列形式を等価の DateTime に変換します。

Parse(String, IFormatProvider)

カルチャ固有の書式情報を使用して、日付と時刻の文字列形式を等価の DateTime に変換します。

Parse(ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles)

カルチャ固有の書式情報と書式スタイルを使用して、日付と時刻の文字列形式を含むメモリ範囲を等価の DateTime に変換します。

Parse(String, IFormatProvider, DateTimeStyles)

カルチャ固有の書式情報と書式スタイルを使用して、日付と時刻の文字列形式を等価の DateTime に変換します。

DateTime.Parseこの記事の「解説」セクションと個々のオーバーロードに関するドキュメントでは、メソッドを呼び出す多くの例が含まれてい DateTime.Parse ます。

注意

この記事にある C# の例の一部は、Try.NET インライン コード ランナーとプレイグラウンドで実行されます。 [実行] ボタンを選択すると、対話型ウィンドウで例が実行されます。 コードを実行したら、コードを変更し、 [実行] をもう一度選択して変更後のコードを実行できます。 変更後のコードが対話型ウィンドウで実行されるか、コンパイルできなかった場合、対話型ウィンドウにすべての C# コンパイラ エラー メッセージが表示されます。

Try.NET インライン コード ランナーとプレイグラウンドのローカル タイム ゾーンは、協定世界時 (UTC) です。 これは、DateTimeDateTimeOffsetTimeZoneInfo 型とそのメンバーについて説明する例の、動作と出力に影響を与える可能性があります。

DateTime.Parse C# の .net Core プロジェクトに含まれるサンプルの完全なセットをダウンロードすることもできます。

注釈

このセクションの内容は次のとおりです。

どのメソッドを呼び出しますか?

終了 Call (英語の可能性あり)
現在のカルチャの規則を使用して、日付と時刻の文字列を解析します。 Parse(String) オーバーロード
特定のカルチャの規則を使用して、日付と時刻の文字列を解析します。 Parse(String, IFormatProvider)オーバーロード(「解析と文化規則」を参照)
特殊なスタイル要素 (空白や空白なしなど) を使用して、日付と時刻の文字列を解析します。 Parse(String, IFormatProvider, DateTimeStyles) オーバーロード
特定の形式である必要がある日付と時刻の文字列を解析します。 DateTime.ParseExact または DateTime.TryParseExact
日付と時刻の文字列を解析し、UTC または現地時刻への変換を実行します。 Parse(String, IFormatProvider, DateTimeStyles) オーバーロード
例外を処理せずに日付と時刻の文字列を解析します。 DateTime.TryParse メソッド
書式設定操作によって作成された日付と時刻の値を復元 (ラウンドトリップ) します。 "o" または "r" 標準書式指定文字列を メソッドに渡し、 を使用して ToString(String) オーバーロードを Parse(String, IFormatProvider, DateTimeStyles) 呼び出します。 DateTimeStyles.RoundtripKind
コンピューター (および場合によっては文化的な) 境界を越えて、固定形式で日付と時刻の文字列を解析します。 DateTime.ParseExact メソッド DateTime.TryParseExact または メソッド

解析する文字列

メソッド Parse は、日付と時刻の値の文字列形式を等価の に変換 DateTime します。 例外をスローせずに、入力文字列を完全に解析 FormatException します。

重要

文字列形式が認識できないという理由で解析操作が失敗した場合、メソッドは をスローします。一方、 メソッドは Parse FormatException TryParse を返します false 。 例外処理はコストがかかる可能性があるから、入力ソースが信頼されているから解析操作が成功すると予想される場合 Parse は、 を使用する必要があります。 TryParse 解析エラーが発生する可能性が高い場合(特に入力ソースが信頼されていない場合、または正常に解析されない文字列に置き換える妥当な既定値がある場合) が望ましい。

解析する文字列は、次の形式を使用できます。

  • 日付と時刻のコンポーネントを含む文字列。

  • 日付を含むが、時刻コンポーネントがない文字列。 時刻コンポーネントが存在しない場合、メソッドは午前 0 時 00 分を想定します。 日付コンポーネントに 2 桁の年がある場合は、現在のカルチャの現在の暦または指定されたカルチャの現在の暦の に基づいて年に変換されます (null 以外の引数を持つオーバーロードを使用する場合 Calendar.TwoDigitYearMax provider )。

  • 月と年のみを含み、日の要素を含む日付コンポーネントを含む文字列。 メソッドは、月の最初の日を想定しています。

  • 月と日のみを含み、年の要素を含む日付コンポーネントを含む文字列。 メソッドは、現在の年を想定しています。

  • 時刻を含むが日付コンポーネントがない文字列。 メソッドは、 オーバーロードを呼び出して 引数に を含めない限り、現在の日付を想定します。この場合、メソッドは Parse(String, IFormatProvider, DateTimeStyles) DateTimeStyles.NoCurrentDateDefault 0001 年 1 月 1 日の日付を想定します styles

  • 時間と AM/PM 指定子のみを含み、日付コンポーネントを含めない時刻コンポーネントを含む文字列。 メソッドは、現在の日付と時刻を、分も秒も持たない時刻と見なします。 この動作を変更するには、 オーバーロードを呼び出し、 引数に を含め、その場合、メソッドは Parse(String, IFormatProvider, DateTimeStyles) DateTimeStyles.NoCurrentDateDefault 0001 年 1 月 1 日の日付を想定しています styles

  • タイム ゾーン情報を含み、ISO 8601 に準拠する文字列。 次の例では、最初の文字列は 協定世界時 (UTC) を指定し、2 番目の文字列は UTC より 7 時間早いタイム ゾーンの時刻を指定します。

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

  • GMT 指定子を含み、RFC 1123 時刻形式に準拠する文字列。例えば:

    "Sat, 01 Nov 2008 19:35:00 GMT"

  • 日時とタイム ゾーン オフセット情報を含む文字列。例えば:

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

次の例では、現在のカルチャの書式設定規則 (この場合は en-US カルチャ) を使用して、これらの各形式の文字列を解析します。

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 解析します。 入力文字列が閏年以外の年の閏日を表す場合、 メソッドは をスローします FormatException

メソッドは、現在のカルチャまたは指定したカルチャの書式設定規則を使用して、日付と時刻の文字列表現を解析しようとするので、異なるカルチャ間で文字列を解析しようとすると失敗 Parse する可能性があります。 異なるローカルで特定の日付と時刻の形式を解析するには、 メソッドのいずれかのオーバーロードを使用し DateTime.ParseExact 、書式指定子を指定します。

解析と文化規則

解析する文字列 (次の表で で表される) が Parse ISO 8601 パターンに準拠していない限り、メソッドのすべてのオーバーロードはカルチャに依存 s します。 解析操作では、次のように派生した オブジェクトの DateTimeFormatInfo 書式設定情報が使用されます。

重要

和暦の時代 (年号) は天皇の代に基づいているため、変更されることが予想されます。 たとえば、JapaneseCalendarJapaneseLunisolarCalendar において、2019 年 5 月 1 日から令和時代が始まることになりました。 このような時代 (年号) の変更は、これらのカレンダーを使用するすべてのアプリケーションに影響します。 詳細およびアプリケーションが影響を受けるかどうかを判断する方法については、「 .net の日本語カレンダーでの新しい時代 (年号) の処理」を参照してください。 Windows システムでアプリケーションをテストして、時代 (年号) の変化に対応できるようにする方法については、「日本語時代 (年号) の変更に備えてアプリケーションを準備する」を参照してください。 複数の時代 (年号) を含む暦をサポートする .NET の機能について、および複数の時代 (年号) をサポートする予定表を操作する場合のベストプラクティスについては、「時代と作業

を呼び出す場合 かつ、provider が次の場合 書式設定情報は から派生します。
Parse(String) - 現在のスレッド カルチャ ( DateTimeFormatInfo.CurrentInfo プロパティ)
Parse(String, IFormatProvider) または Parse(String, IFormatProvider, DateTimeStyles) DateTimeFormatInfo オブジェクト 指定した DateTimeFormatInfo オブジェクト
Parse(String, IFormatProvider) または Parse(String, IFormatProvider, DateTimeStyles) null 現在のスレッド カルチャ ( DateTimeFormatInfo.CurrentInfo プロパティ)
Parse(String, IFormatProvider) または Parse(String, IFormatProvider, DateTimeStyles) CultureInfo オブジェクト CultureInfo.DateTimeFormat プロパティ
Parse(String, IFormatProvider) または Parse(String, IFormatProvider, DateTimeStyles) カスタム IFormatProvider 実装 IFormatProvider.GetFormat メソッド

書式設定情報が オブジェクトから派生する場合、 プロパティは、解析操作で使用 DateTimeFormatInfo DateTimeFormatInfo.Calendar されるカレンダーを定義します。

標準カルチャとは異なるカスタマイズされた設定を持つ オブジェクトを使用して日付と時刻の文字列を解析する場合は、 メソッドの代わりに メソッドを使用して、変換が成功する可能性を DateTimeFormatInfo ParseExact 向上します Parse 。 標準以外の日付と時刻の文字列は、複雑で解析が困難な場合があります。 メソッド Parse は、いくつかの暗黙的な解析パターンを持つ文字列の解析を試み、すべてが失敗する可能性があります。 これに対し、 メソッドでは、成功する可能性がある 1 つ以上の正確な解析 ParseExact パターンを明示的に指定する必要があります。 詳細については、トピックの「DateTimeFormatInfo と 動的データ」セクションを参照 DateTimeFormatInfo してください。

重要

特定のカルチャの書式設定規則は動的であり、変更される可能性があります。 つまり、既定の (現在の) カルチャの書式設定規則に依存する操作、またはインバリアント カルチャ以外のカルチャを表すオブジェクトを指定する解析操作は、次の場合に予期せず失敗する IFormatProvider 可能性があります。

  • カルチャ固有のデータは、.NET Framework のメジャーバージョンまたはマイナーバージョン間で変更されるか、.NET Framework の既存のバージョンに対する更新の結果として変更されます。
  • カルチャ固有のデータにはユーザー設定が反映されますが、これはマシン間またはセッション間で異なる場合があります。
  • カルチャ固有のデータは、標準カルチャまたはカスタムカルチャの設定をオーバーライドする置換カルチャを表します。

カルチャデータの変更に関連付けられたデータと時刻文字列の解析に問題が発生しないようにするには、インバリアントカルチャを使用して日付と時刻の文字列を解析するか、 ParseExact メソッドまたはメソッドを呼び出し TryParseExact 、解析する文字列の正確な形式を指定します。 日付と時刻のデータをシリアル化および逆シリアル化する場合は、インバリアントカルチャの書式指定規則を使用するか、バイナリ形式で値をシリアル化および逆シリアル化することができ DateTime ます。

詳細については、「」トピックの「動的カルチャデータ」セクション CultureInfo と「DateTime 値の保持」セクションを参照してください DateTime

解析とスタイル要素

すべてのオーバーロードは、 Parse 入力文字列 (次の表ので表されます) の先頭、内部、または末尾の空白文字を無視 s します。 日付と時刻は、先頭と末尾の番号記号 ("#"、U + 0023) のペアで囲むことができ、1つ以上の NULL 文字 (U + 0000) で trailed できます。

また、オーバーロードには、 Parse(String, IFormatProvider, DateTimeStyles) styles 列挙体の1つ以上のメンバーで構成されるパラメーターがあり DateTimeStyles ます。 このパラメーターは、をどのよう s に解釈するか、および解析操作を日付と時刻に変換する方法を定義し s ます。 次の表では、解析操作における各メンバーの効果について説明し DateTimeStyles ます。

DateTimeStyles メンバー 変換に対する影響
AdjustToUniversal を解析し、必要に応じて、次のように s UTC に変換します。

-にタイムゾーンオフセットが含まれている s 場合、または s にタイムゾーン情報が含まれておらず、フラグが含まれている場合 styles AssumeLocal 、メソッドは文字列を解析し、を呼び出して、 ToUniversalTime 返された値を DateTime UTC に変換し、 Kind プロパティをに設定し DateTimeKind.Utc ます。
-が s UTC を表すことを示している場合、またはにタイムゾーン情報が含まれておらず、フラグが含まれている場合 s styles AssumeUniversal 、メソッドは文字列を解析し、返された値に対してタイムゾーン変換を実行せず DateTime に、 Kind プロパティをに設定し DateTimeKind.Utc ます。
-その他のすべての場合、フラグは無効です。
AllowInnerWhite この値は無視されます。 内部の空白文字は、常にの日付と時刻の要素で許可され s ます。
AllowLeadingWhite この値は無視されます。 先頭の空白文字は、常にの日付と時刻の要素で許可され s ます。
AllowTrailingWhite この値は無視されます。 の日付と時刻の要素では、末尾の空白文字が常に許可され s ます。
AllowWhiteSpaces に、 s 先頭、内部、および末尾の空白を含めることができることを指定します。 これは既定の動作です。 など、より制限の厳しい列挙値を指定することによってオーバーライドすることはできません DateTimeStyles None
AssumeLocal s タイムゾーン情報がない場合に、現地時刻と見なされるように指定します。 フラグが指定されていない限り AdjustToUniversalKind 戻り DateTime 値のプロパティはに設定され DateTimeKind.Local ます。
AssumeUniversal s タイムゾーン情報がない場合、UTC が想定されることを指定します。 AdjustToUniversalフラグが存在しない場合、メソッドは、返された DateTime 値を UTC から現地時刻に変換し、その Kind プロパティをに設定し DateTimeKind.Local ます。
None 有効ですが、この値は無視されます。
RoundtripKind タイムゾーン情報を含む文字列の場合、は、そのプロパティがに設定された日付と時刻の文字列を、現地時刻を表す値に変換しないように試み DateTime Kind DateTimeKind.Local ます。 通常、このような文字列は、メソッドを呼び出し、 DateTime.ToString(String) "o"、"r"、または "u" 標準書式指定子を使用することによって作成されます。

戻り値と DateTime. Kind

オーバーロードは、 DateTime.Parse DateTime タイムゾーン情報を含むプロパティを持つ値を返し Kind ます。 時刻が次のように指定されている可能性があります。

一般に、 Parse メソッドは、 DateTime プロパティがであるオブジェクトを返し Kind DateTimeKind.Unspecified ます。 ただし、メソッドは、 Parse Kind パラメーターとパラメーターの値に応じて、タイムゾーンの変換を実行し、プロパティの値を別の値に設定することもでき s styles ます。

If タイムゾーンの変換 Kind プロパティ
s タイムゾーン情報を格納します。 日付と時刻は、ローカルタイムゾーンの時刻に変換されます。 DateTimeKind.Local
s にはタイムゾーン情報が含まれ、にはフラグが含まれてい styles AdjustToUniversal ます。 日付と時刻は世界協定時刻 (UTC) に変換されます。 DateTimeKind.Utc
s には、Z または GMT のタイムゾーン指定子が含まれ、フラグが含まれてい styles RoundtripKind ます。 日付と時刻は UTC として解釈されます。 DateTimeKind.Utc

次の例では、タイムゾーン情報を含む日付文字列をローカルタイムゾーンの時刻に変換します。

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

Kindフラグを使用して、書式設定および解析操作中に、日付と時刻のプロパティの値を保持することもでき DateTimeStyles.RoundtripKind ます。 次の例は、 RoundtripKind DateTime "o"、"r"、または "u" 書式指定子を使用して、文字列に変換される値に対するフラグの影響を示しています。

   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)

現在のスレッド カルチャの書式規則を使用して、日付と時刻の文字列形式を等価の DateTime に変換します。

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

変換する日時を含む文字列。 詳細については、「解析する文字列」をご覧ください。

戻り値

DateTime

s に含まれる日時と等価のオブジェクト。

例外

snullです。

s に日付と時刻の有効な文字列形式が含まれていません。

次の例では、複数の日付と時刻の値の文字列形式を解析します。

  • 既定の書式プロバイダーを使用します。これは、サンプル出力の生成に使用されるコンピューターの現在のスレッドカルチャの書式指定規則を提供します。 この例の出力には、en-us カルチャの書式指定規則が反映されています。

  • 既定のスタイル値 () を使用し AllowWhiteSpaces ます。

この例外は、 FormatException メソッドが他のカルチャの書式指定規則を使用して日付と時刻の文字列形式を解析しようとした場合にスローされる例外を処理します。 また、現在のスレッドカルチャの書式指定規則を使用しない日付と時刻の値を正常に解析する方法も示します。

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.

注釈

sにタイムゾーン情報が含まれている場合、このメソッド DateTime は、プロパティがである値を返し、 Kind DateTimeKind.Local の日付と時刻 s を現地時刻に変換します。 それ以外の場合、タイムゾーンの変換は実行されず、 DateTime Kind プロパティがである値が返され DateTimeKind.Unspecified ます。

このオーバーロード s は、現在のカルチャの書式指定規則を使用して解析を試みます。 現在のカルチャは、プロパティによって示され CurrentCulture ます。 特定のカルチャの書式指定規則を使用して文字列を解析するに Parse(String, IFormatProvider) は、またはのオーバーロードを呼び出し Parse(String, IFormatProvider, DateTimeStyles) ます。

このオーバーロードは、style を使用して解析を試み s DateTimeStyles.AllowWhiteSpaces ます。

こちらもご覧ください

適用対象

Parse(String, IFormatProvider)

カルチャ固有の書式情報を使用して、日付と時刻の文字列形式を等価の DateTime に変換します。

public:
 static DateTime Parse(System::String ^ s, IFormatProvider ^ provider);
public static DateTime Parse (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

変換する日時を含む文字列。 詳細については、「解析する文字列」をご覧ください。

provider
IFormatProvider

s に関するカルチャ固有の書式情報を提供するオブジェクト。 「解析およびカルチャの規則」をご覧ください。

戻り値

DateTime

s で指定された書式に従って表記された、provider に含まれる日時と等価のオブジェクト。

例外

snullです。

s に日付と時刻の有効な文字列形式が含まれていません。

次の例では、en-us、fr-fr、および de の各カルチャの規則を使用して、日付文字列の配列を解析します。 この例では、1つの日付の文字列形式が、カルチャによって異なる方法で解釈されることを示しています。

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.

注釈

sにタイムゾーン情報が含まれている場合、このメソッド DateTime は、プロパティがである値を返し、 Kind DateTimeKind.Local の日付と時刻 s を現地時刻に変換します。 それ以外の場合、タイムゾーンの変換は実行されず、 DateTime Kind プロパティがである値が返され DateTimeKind.Unspecified ます。

このオーバーロード s は、スタイルを使用して解析を試み DateTimeStyles.AllowWhiteSpaces ます。

こちらもご覧ください

適用対象

Parse(ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles)

カルチャ固有の書式情報と書式スタイルを使用して、日付と時刻の文字列形式を含むメモリ範囲を等価の DateTime に変換します。

public static DateTime Parse (ReadOnlySpan<char> s, IFormatProvider? provider = default, System.Globalization.DateTimeStyles styles = System.Globalization.DateTimeStyles.None);
public static DateTime Parse (ReadOnlySpan<char> s, IFormatProvider provider = default, 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 = Nothing, Optional styles As DateTimeStyles = System.Globalization.DateTimeStyles.None) As DateTime

パラメーター

s
ReadOnlySpan<Char>

解析する文字列を含むメモリ範囲。 詳細については、「解析する文字列」をご覧ください。

provider
IFormatProvider

s に関するカルチャ固有の書式情報を提供するオブジェクト。 「解析およびカルチャの規則」をご覧ください。

styles
DateTimeStyles

解析操作を成功させるために s で使用できるスタイル要素を示し、現在のタイム ゾーンまたは現在の日付に関連して解析した日付を解釈する方法を定義する列挙値のビットごとの組み合わせ。 通常指定する値は、None です。

戻り値

DateTime

provider および styles で指定された書式に従って表記された s に含まれる日時と等価のオブジェクト。

例外

s に日付と時刻の有効な文字列形式が含まれていません。

stylesDateTimeStyles 値の正しくない組み合わせが含まれています。 たとえば、AssumeLocalAssumeUniversal の両方です。

適用対象

Parse(String, IFormatProvider, DateTimeStyles)

カルチャ固有の書式情報と書式スタイルを使用して、日付と時刻の文字列形式を等価の DateTime に変換します。

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);
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

変換する日時を含む文字列。 詳細については、「解析する文字列」をご覧ください。

provider
IFormatProvider

s に関するカルチャ固有の書式情報を提供するオブジェクト。 「解析およびカルチャの規則」をご覧ください。

styles
DateTimeStyles

解析操作を成功させるために s で使用できるスタイル要素を示し、現在のタイム ゾーンまたは現在の日付に関連して解析した日付を解釈する方法を定義する列挙値のビットごとの組み合わせ。 通常指定する値は、None です。

戻り値

DateTime

provider および styles で指定された書式に従って表記された s に含まれる日時と等価のオブジェクト。

例外

snullです。

s に日付と時刻の有効な文字列形式が含まれていません。

stylesDateTimeStyles 値の正しくない組み合わせが含まれています。 たとえば、AssumeLocalAssumeUniversal の両方です。

次の例では、 メソッド Parse(String, IFormatProvider, DateTimeStyles) を示し、結果の値の Kind プロパティの値を表示 DateTime します。

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.

注釈

このメソッド オーバーロードは、 の日付と時刻を変換し、返された値の s Kind プロパティを次 DateTime のように設定します。

If タイム ゾーン変換 Kind プロパティ
s にはタイム ゾーン情報は含め "" はありません。 [なし] : DateTimeKind.Unspecified
s にはタイム ゾーン情報が含まれている。 ローカル タイム ゾーンの時刻まで DateTimeKind.Local
s にはタイム ゾーン情報が含まれています。 には styles フラグが含 DateTimeStyles.AdjustToUniversal まれます。 使用協定世界時 (UTC) DateTimeKind.Utc
s には Z または GMT のタイム ゾーン指定子が含まれます。 には styles が含まれます DateTimeStyles.RoundtripKind [なし] : DateTimeKind.Utc

こちらもご覧ください

適用対象