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型の変数で取得できます。
変換不可能な場合でも例外が発生しないため、型チェックと型変換を両方安全に行うことができます。