Share via


日付と時刻文字列の解析

解析メソッドは、日付と時刻の文字列形式を、等価の DateTime オブジェクトに変換します。Parse メソッドと TryParse メソッドは、複数ある日付と時刻の共通形式をどれでも変換します。ParseExact メソッドと TryParseExact メソッドは、日付と時刻の書式指定文字列で指定されるパターンと正確に適合する文字列形式を変換します。

解析は、日付と時刻の区切り記号に使用される文字列または月、日、年号の名前などの情報を提供する書式プロバイダのプロパティに影響されます。書式プロバイダは、現在の DateTimeFormatInfo オブジェクトであり、現在のスレッド カルチャによって暗黙的に指定されるか、または解析メソッドの IFormatProvider パラメータによって明示的に指定されます。IFormatProvider パラメータには、カルチャを表す CultureInfo オブジェクト、または DateTimeFormatInfo オブジェクトを指定します。

解析される日付の文字列形式には、月と、日または年の少なくともどちらかが含まれている必要があります。時刻の文字列形式には、時間と、分または AM/PM 指定子の少なくともどちらかが含まれている必要があります。ただし可能であれば、省略された構成要素に対して解析が既定値を使用します。日付がない場合は現在の日付、年がない場合は現在の年、月の日付がない場合はその月の初日、時刻がない場合は午前 0 時が、それぞれ既定で設定されます。

文字列形式が時刻のみを指定している場合は、解析が DateTime オブジェクトの YearMonth、および Day の各プロパティを Today プロパティの対応する値に設定して、このオブジェクトを返します。ただし、解析メソッドに NoCurrentDateDefault 定数が指定された場合は、結果の年、月、および日の各プロパティが値 1 に設定されます。

時刻の文字列形式でタイム ゾーンが省略されている場合は、解析が DateTime オブジェクトの Kind プロパティを Unspecified に設定してこのオブジェクトを返します。タイム ゾーンが指定されている場合 (たとえばタイム ゾーン オフセット "-07:00" によって) は、解析が DateTime オブジェクトの Kind プロパティを Local に設定し、その値をコンピュータのローカル タイム ゾーンに合わせて調整して、このオブジェクトを返します。この動作は、解析メソッドに DateTimeStyles 定数を使用することで変更できます。

書式プロバイダは、あいまいな数値の日付を解釈する際にも使用されます。たとえば、文字列 "02/03/04" で表された日付は、どの構成要素が月、日、年であるかが明確ではありません。この場合は、書式プロバイダの類似する日付形式の順序に従って構成要素が解釈されます。

Parse

Parse メソッドを使用して文字列を DateTime に変換するコード例を次に示します。この例では、現在のスレッドに関連付けられているカルチャを使用して解析が実行されます。現在のカルチャに関連付けられている CultureInfo で入力文字列を解析できない場合は、FormatException がスローされます。

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

そのオブジェクトごとに、定義済みのカルチャのいずれかに設定した CultureInfo を指定することもできます。書式プロバイダを使用してドイツ語文字列を DateTime に変換するコード例を次に示します。この文字列を正しく解析するには、de-DE (ドイツのドイツ語) カルチャを表す CultureInfo を定義し、解析する文字列と共に渡します。これにより、CurrentThreadCurrentCulture の設定が無視されます。

Imports System.Globalization

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

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

DateTimeStyles 列挙体を使用して、文字列で定義されていないフィールドに関して、DateTime に現在の日付および時刻情報を追加しないように指定するコード例を次に示します。

Imports System.Globalization

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

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

ParseExact

ParseExact メソッドは、指定された文字列パターンだけを DateTime に変換します。指定された書式ではない文字列をこのメソッドに渡すと、FormatException がスローされます。標準の日付と時刻書式指定子のいずれかを指定するか、またはカスタムの日付と時刻書式指定子の限定された組み合わせを指定できます。カスタムの書式指定子を使用すると、カスタムの認識文字列を生成できます。書式指定子については、「日付と時刻の書式指定文字列」を参照してください。

次のコード例では、解析する文字列オブジェクト、書式指定子、および CultureInfo オブジェクトを ParseExact メソッドに渡しています。この ParseExact メソッドは、en-US カルチャの Long Date パターンを表す文字列だけを解析できます。

Imports System.Globalization

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

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

参照

その他の技術情報

文字列の解析
型の書式設定
型の変換