この記事では、この 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 桁の数字のみで構成されている場合は、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