ここではTryParseExactメソッドを使って、書式を指定して文字列が日付に変換できるかチェックする方法を紹介します。

DateTime.TryParseExactメソッド

DateTime.TryParseExactメソッドは、日付の文字列が指定した日付の書式と一致するかチェックしてから変換します。
第1引数にはチェック対象のstring型の文字列、第2引数には日付の書式、第3引数にはカルチャ固有の書式情報、第4引数には書式設定オプション(通常None)、第5引数には変換された値を格納するDateTime型の変数を定義します。また、変換が成功した場合はtrue、変換が失敗した場合はfalseを返します。もし変換に失敗した場合は第4引数に「0001/01/01 0:00:00」が格納されます。

構文

Boolean型変数 = DateTime.TryParseExact({チェック対象の文字列}, {日付の書式}, {カルチャ固有の書式情報}, {書式設定オプション}, out {変換された値});


以下は日付の文字列が書式と一致して変換に成功する例です。

string dt = "2020/06/01 12:15:30";
string fmt = "yyyy/MM/dd HH:mm:ss";
CultureInfo ci = CultureInfo.CurrentCulture;
DateTimeStyles dts = DateTimeStyles.None;
DateTime outValue;

if (DateTime.TryParseExact(dt, fmt, ci, dts, out outValue) == true)
{
    Console.WriteLine($"{dt}は{outValue}に変換しました");
}
else
{
    Console.WriteLine($"{dt}は日付に変換できませんでした");
}
//実行結果:2020/06/01 12:15:30は2020/06/01 12:15:30に変換しました


以下は日付の文字列が書式と一致せず変換に失敗する例です。

string dt = "2020/06/01";
string fmt = "yyyy/MM/dd HH:mm:ss";
CultureInfo ci = CultureInfo.CurrentCulture;
DateTimeStyles dts = DateTimeStyles.None;
DateTime outValue;

if (DateTime.TryParseExact(dt, fmt, ci, dts, out outValue) == true)
{
    Console.WriteLine($"{dt}は{outValue}に変換しました");
}
else
{
    Console.WriteLine($"{dt}は日付に変換できませんでした");
}
//実行結果:2020/06/01は日付に変換できませんでした


以上、C#のTryParseExactメソッドを使って、書式を指定して文字列が日付に変換できるかチェックする方法について解説しました。