C#正しい日付かどうかをチェックする (IsDate)

スポンサーリンク

指定した年・月・日が正しい日付かどうか判断するようなエラーチェックが必要になる場合があります。VB で言えば IsDate 関数のようなメソッドです。

Microsoft.VisualBasic 名前空間配下に IsDate メソッドは存在するものの、この IsDate メソッドは DateTime.Parse メソッドに対して例外処理を行っているだけです。初回での例外クラスのインスタンスが生成されるまで、プログラムの制御が止まってしまいますので、ユーザーフレンドリとは言えません。

.NET Framework 2.0 では、System.DateTime 構造体の TryParse メソッドを使うことができますが、.NET Framework 1.1 までは TryParse メソッドがないため自作の判定メソッドを書く他に回避方法はありません。

サンプルコード

以下にサンプルコードを示します。

C# 全般
using System;

/// -----------------------------------------------------------------------------
/// <summary>
///     検証・エラーチェックをサポートした静的クラスです。
/// </summary>
/// -----------------------------------------------------------------------------

public sealed class Validation {

  #region IsDate メソッド

    /// ------------------------------------------------------------------------------
    /// <summary>
    ///     指定した年・月・日が正しい日付であるかどうかを返します。</summary>
    /// <param name="iYear">
    ///     検査対象となる年。</param>
    /// <param name="iMonth">
    ///     検査対象となる月。</param>
    /// <param name="iDay">
    ///     検査対象となる日。</param>
    /// <returns>
    ///     指定した年・月・日が正しい日付であれば true。それ以外は false。</returns>
    /// ------------------------------------------------------------------------------
    public static bool IsDate(int iYear, int iMonth, int iDay) {
        if ((DateTime.MinValue.Year > iYear) || (iYear > DateTime.MaxValue.Year)) {
            return false;
        }

        if ((DateTime.MinValue.Month > iMonth) || (iMonth > DateTime.MaxValue.Month)) {
            return false;
        }

        int iLastDay = DateTime.DaysInMonth(iYear, iMonth);

        if ((DateTime.MinValue.Day > iDay) || (iDay > iLastDay)) {
            return false;
        }

        return true;
    }

  #endregion

}

使用例は以下のようになります。

C# 全般
    // 正しい日付かどうかをチェックする
    if (Validation.IsDate(2004, 02, 29)) {
        MessageBox.Show("正しい日付です");
    }

関連するリファレンス

準備中です。

スポンサーリンク