この記事では、この 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 桁の数字のみで構成されている場合は、Calendar.TwoDigitYearMax プロパティの値に基づいて、provider
パラメーターの現在のカレンダーの年に変換されます。
s
の先頭、内側、または末尾の空白文字は無視されます。 日付と時刻は、先頭と末尾の NUMBER SIGN 文字 ('#'、U+0023) のペアで角かっこで囲み、1 つ以上の NULL 文字 (U+0000) で後ろに続けることができます。
日付と時刻の要素に固有の有効な形式、および日付と時刻で使用される名前と記号は、 provider
パラメーターによって定義されます。これは、次のいずれかになります。
-
s
パラメーターで書式設定が使用されるカルチャを表すCultureInfo オブジェクト。 CultureInfo.DateTimeFormat プロパティによって返されるDateTimeFormatInfo オブジェクトは、s
で使用される書式設定を定義します。 -
s
で使用される書式を定義するDateTimeFormatInfo オブジェクト。 - カスタム IFormatProvider 実装。 そのIFormatProvider.GetFormatメソッドは、
s
で使用される書式を定義するDateTimeFormatInfo オブジェクトを返します。
provider
がnull
されている場合は、現在のカルチャが使用されます。
s
現在のカレンダーの閏年の閏日の文字列表現である場合、メソッドはs
正常に解析します。
s
がprovider
の現在のカレンダーの閏年以外の閏年の閏日の文字列表現である場合、解析操作は失敗し、メソッドは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) メソッドは必要な時間変換を実行し、次のいずれかを返します。
- 日付と時刻が現地時刻を反映し、Kind プロパティがDateTimeKind.LocalされるDateTime値。
- または、
styles
に AdjustToUniversal フラグが含まれている場合は、日付と時刻が UTC を反映し、Kind プロパティがDateTimeKind.UtcDateTime値です。
この動作は、 DateTimeStyles.RoundtripKind フラグを使用してオーバーライドできます。
カスタム カルチャを解析する
カスタム カルチャ用に生成された日付と時刻の文字列を解析する場合は、TryParse メソッドの代わりに TryParseExact メソッドを使用して、解析操作が成功する確率を向上させます。 カスタム カルチャの日付と時刻の文字列は、複雑で解析が困難な場合があります。 TryParse メソッドは、いくつかの暗黙的な解析パターンを持つ文字列の解析を試みますが、これらはすべて失敗する可能性があります。 これに対し、 TryParseExact メソッドでは、成功する可能性が高い 1 つ以上の正確な解析パターンを明示的に指定する必要があります。
カスタム カルチャの詳細については、 System.Globalization.CultureAndRegionInfoBuilder クラスを参照してください。
.NET