C# YYYYMMDD書式の文字列が日付かどうか判定する
C#
で、YYYYMMDD書式の文字列
が日付として妥当かどうかを判定します。
以下のように、Date.TryParseExact
を使用して、日付型の文字列に変換可能かどうかで判定しています。
string value = "20220123";
if (!DateTime.TryParseExact(value, "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out var d))
{
// valueがdatetime型に変換可能な場合のみこの処理が行われる
// dは日付型に変換した変数
}
時刻も同じ方法でチェックできます。
string value = "2359";
if (!DateTime.TryParseExact(value, "HHmm", null, System.Globalization.DateTimeStyles.None, out var d))
{
// valueがdatetime型に変換可能な場合のみこの処理が行われる
// dは日付型に変換した変数
}
解説
DateTime.TryParseExact(判定したい文字列, 日付書式, カルチャ設定, 日付解析用オプション, out 変換後の値)
の形式で指定します。
カルチャ設定は地域固有の設定情報です。例えば日本の和暦を扱いたい場合などに指定しますが、YYYYMMDD
のような書式であれば未設定(null
)で問題ありません。
日付解析用オプションはYYYYMMDD
のような書式であればSystem.Globalization.DateTimeStyles.None
で問題ありません。
最後のout
パラメータで、日付変換した結果をDateTime
型の変数で取得できます。
変換不可能な場合でも例外が発生しないため、型チェックと型変換を両方安全に行うことができます。