次の方法で共有


System.DateTime.TryParse メソッド

この記事では、この API のリファレンス ドキュメントに補足的な解説を提供します。

DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) メソッドは、日付、時刻、タイム ゾーンの情報を含むことができる文字列を解析します。 DateTime.Parse(String, IFormatProvider, DateTimeStyles) メソッドに似ていますが、DateTime.TryParse(String, DateTime) メソッドが変換に失敗しても例外がスローされない点が異なります。

このメソッドは、認識されないデータを無視し、入力文字列 (s) を完全に解析しようとします。 sに時刻が含まれているが日付がない場合、メソッドは既定で現在の日付を置き換えるか、stylesNoCurrentDateDefaultフラグが含まれている場合は、DateTime.Date.MinValueに置き換える。 sに日付が含まれているが、時刻がない場合は、12:00 の午前 0 時が既定の時刻として使用されます。 日付が存在するが、その年のコンポーネントが 2 桁の数字のみで構成されている場合は、Calendar.TwoDigitYearMax プロパティの値に基づいて、provider パラメーターの現在のカレンダーの年に変換されます。 sの先頭、内側、または末尾の空白文字は無視されます。 日付と時刻は、先頭と末尾の NUMBER SIGN 文字 ('#'、U+0023) のペアで角かっこで囲み、1 つ以上の NULL 文字 (U+0000) で後ろに続けることができます。

日付と時刻の要素に固有の有効な形式、および日付と時刻で使用される名前と記号は、 provider パラメーターによって定義されます。これは、次のいずれかになります。

providernullされている場合は、現在のカルチャが使用されます。

s現在のカレンダーの閏年の閏日の文字列表現である場合、メソッドはs正常に解析します。 sproviderの現在のカレンダーの閏年以外の閏年の閏日の文字列表現である場合、解析操作は失敗し、メソッドはfalseを返します。

styles パラメーターは、解析された文字列の正確な解釈と、解析操作で処理する方法を定義します。 次の表に示すように、 DateTimeStyles 列挙体の 1 つ以上のメンバーを指定できます。

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

sにタイム ゾーン情報が含まれていない場合、DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) メソッドは、styles フラグが特に指定しない限り、Kind プロパティがDateTimeKind.UnspecifiedDateTime値を返します。 sにタイム ゾーンまたはタイム ゾーン オフセット情報が含まれている場合、DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) メソッドは必要な時間変換を実行し、次のいずれかを返します。

この動作は、 DateTimeStyles.RoundtripKind フラグを使用してオーバーライドできます。

カスタム カルチャを解析する

カスタム カルチャ用に生成された日付と時刻の文字列を解析する場合は、TryParse メソッドの代わりに TryParseExact メソッドを使用して、解析操作が成功する確率を向上させます。 カスタム カルチャの日付と時刻の文字列は、複雑で解析が困難な場合があります。 TryParse メソッドは、いくつかの暗黙的な解析パターンを持つ文字列の解析を試みますが、これらはすべて失敗する可能性があります。 これに対し、 TryParseExact メソッドでは、成功する可能性が高い 1 つ以上の正確な解析パターンを明示的に指定する必要があります。

カスタム カルチャの詳細については、 System.Globalization.CultureAndRegionInfoBuilder クラスを参照してください。