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

スポンサーリンク

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

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

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

サンプルコード

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

J# 全般
import System.*;

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

public final class Validation {

  #region IsDate メソッド

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

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

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

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

        return true;
    }

  #endregion

}

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

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

関連するリファレンス

準備中です。

スポンサーリンク