zukucode
主にWEB関連の情報を技術メモとして発信しています。

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型の変数で取得できます。

変換不可能な場合でも例外が発生しないため、型チェックと型変換を両方安全に行うことができます。


関連記事