この記事では、この API のリファレンス ドキュメントに補足的な解説を提供します。
DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) メソッドは、日付、時刻、タイム ゾーンの情報を含むことができる文字列を解析します。 DateTime.Parse(String, IFormatProvider, DateTimeStyles) メソッドに似ていますが、異なる点としては、DateTime.TryParse(String, DateTime) メソッドは変換に失敗しても例外をスローしないことです。
このメソッドは、認識されないデータを無視し、入力文字列 (s
) を完全に解析しようとします。 s
に時刻が含まれているが日付がない場合、メソッドは既定で現在の日付を置き換えるか、styles
NoCurrentDateDefaultフラグが含まれている場合は、DateTime.Date.MinValue
に置き換える。 s
に日付が含まれているが、時刻がない場合は、12:00 の午前 0 時が既定の時刻として使用されます。 日付が存在するが、その年のコンポーネントが 2 桁の数字のみで構成されている場合は、provider
プロパティの値に基づいて、Calendar.TwoDigitYearMax パラメーターの現在のカレンダーの年に変換されます。 s
の先頭、内側、または末尾の空白文字は無視されます。 日付と時刻は、先頭と末尾を NUMBER SIGN 文字 ('#'、U+0023) で囲み、さらに 1 つ以上の NULL 文字 (U+0000) を付け加えることができます。
日付と時刻の要素に固有の有効な形式、および日付と時刻で使用される名前と記号は、 provider
パラメーターによって定義されます。これは、次のいずれかになります。
- CultureInfo パラメーターで使用される書式のカルチャを表現する
s
オブジェクト。 DateTimeFormatInfo プロパティによって返されるCultureInfo.DateTimeFormat オブジェクトは、s
で使用される書式設定を定義します。 - DateTimeFormatInfoで使用される書式を定義する
s
オブジェクト。 - カスタム IFormatProvider 実装。 そのIFormatProvider.GetFormatメソッドは、DateTimeFormatInfoで使用される書式を定義する
s
オブジェクトを返します。
provider
が null
の場合は、現在のカルチャが使用されます。
s
現在のカレンダーの閏年の閏日の文字列表現である場合、メソッドはs
正常に解析します。 s
がprovider
の現在のカレンダーの閏年以外の閏年の閏日の文字列表現である場合、解析操作は失敗し、メソッドはfalse
を返します。
styles
パラメーターは、解析された文字列の正確な解釈と、解析操作で処理する方法を定義します。 次の表に示すように、 DateTimeStyles 列挙体の 1 つ以上のメンバーを指定できます。
DateTimeStyles メンバー | 説明 |
---|---|
AdjustToUniversal | s を解析し、必要に応じて UTC に変換します。 s にタイムゾーン オフセットが含まれている場合、またはs にタイムゾーン情報が含まれていないがstyles にDateTimeStyles.AssumeLocalフラグが含まれている場合、メソッドは文字列を解析し、ToUniversalTimeを呼び出して返されたDateTime値をUTCに変換し、KindプロパティをDateTimeKind.Utcに設定します。 s が UTC を表していることを示す場合、またはs にタイム ゾーン情報が含まれていないが、styles フラグが含まれているDateTimeStyles.AssumeUniversal場合、メソッドは文字列を解析し、返されたDateTime値に対してタイム ゾーン変換を実行せず、Kind プロパティを DateTimeKind.Utc に設定します。 それ以外の場合は、フラグは無効です。 |
AllowInnerWhite | 有効ですが、この値は無視されます。 s の日付と時刻の要素では、内側の空白を使用できます。 |
AllowLeadingWhite | 有効ですが、この値は無視されます。 先頭の空白は、 s の日付と時刻の要素で許可されます。 |
AllowTrailingWhite | 有効ですが、この値は無視されます。 末尾の空白は、 s の日付と時刻の要素で許可されます。 |
AllowWhiteSpaces | s に先頭、内側、末尾の空白を含めることができます。 これが既定の動作です。 DateTimeStylesなどのより制限の厳しいDateTimeStyles.None列挙値を指定してオーバーライドすることはできません。 |
AssumeLocal | s にタイム ゾーン情報がない場合は、現地時刻を表すと見なされることを指定します。 DateTimeStyles.AdjustToUniversal フラグが存在しない限り、返されるKind値のDateTime プロパティはDateTimeKind.Localに設定されます。 |
AssumeUniversal | s にタイム ゾーン情報がない場合は、UTC を表すと見なされることを指定します。 DateTimeStyles.AdjustToUniversal フラグが存在しない限り、メソッドは返されたDateTime値を UTC から現地時刻に変換し、Kind プロパティを DateTimeKind.Local に設定します。 |
None | 有効ですが、この値は無視されます。 |
RoundtripKind | タイム ゾーン情報を含む文字列の場合は、DateTime プロパティを Kind に設定して、日付と時刻の文字列をDateTimeKind.Local値に変換しないようにします。 通常、このような文字列は、"o"、"r"、または "u" の標準書式指定子を使用して DateTime.ToString(String) メソッドを呼び出すことによって作成されます。 |
s
にタイム ゾーン情報が含まれていない場合、DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) メソッドは、DateTime フラグが特に指定しない限り、Kind プロパティがDateTimeKind.Unspecifiedstyles
値を返します。 s
にタイム ゾーンまたはタイム ゾーン オフセット情報が含まれている場合、DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime) メソッドは必要な時間変換を実行し、次のいずれかを返します。
- 現地時刻を反映する日付と時刻を持ち、DateTime プロパティがKindであるDateTimeKind.Local値。
- または、
styles
には、AdjustToUniversal フラグが含まれ、DateTime プロパティが Kind で、日時が UTC を反映しする DateTimeKind.Utc 値が含まれます。
この動作は、 DateTimeStyles.RoundtripKind フラグを使用してオーバーライドできます。
カスタム カルチャを解析する
カスタム カルチャ用に生成された日付と時刻の文字列を解析する場合は、TryParseExact メソッドの代わりに TryParse メソッドを使用して、解析操作が成功する確率を向上させます。 カスタム カルチャの日付と時刻の文字列は、複雑で解析が困難な場合があります。 TryParse メソッドは、いくつかの暗黙的な解析パターンを持つ文字列の解析を試みますが、これらはすべて失敗する可能性があります。 これに対し、 TryParseExact メソッドでは、成功する可能性が高い 1 つ以上の正確な解析パターンを明示的に指定する必要があります。
カスタム カルチャの詳細については、 System.Globalization.CultureAndRegionInfoBuilder クラスを参照してください。
.NET