VB.NET正しい日付かどうかをチェックする (IsDate)

スポンサーリンク

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

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

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

サンプルコード

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

VB.NET 全般
Option Strict On

Public NotInheritable Class Validation

  #Region " IsDate メソッド "

    ''' ------------------------------------------------------------------------------
    ''' <summary>
    '''     指定した年・月・日が正しい日付であるかどうかを返します。</summary>
    ''' <param name="iYear">
    '''     検査対象となる年。</param>
    ''' <param name="iMonth">
    '''     検査対象となる月。</param>
    ''' <param name="iDay">
    '''     検査対象となる日。</param>
    ''' <returns>
    '''     指定した年・月・日が正しい日付であれば True。それ以外は False。</returns>
    ''' ------------------------------------------------------------------------------
    Public Shared Function IsDate(ByVal iYear As Integer, ByVal iMonth As Integer, ByVal iDay As Integer) As Boolean
        If (DateTime.MinValue.Year > iYear) OrElse (iYear > DateTime.MaxValue.Year) Then
            Return False
        End If

        If (DateTime.MinValue.Month > iMonth) OrElse (iMonth > DateTime.MaxValue.Month) Then
            Return False
        End If

        Dim iLastDay As Integer = DateTime.DaysInMonth(iYear, iMonth)

        If (DateTime.MinValue.Day > iDay) OrElse (iDay > iLastDay) Then
            Return False
        End If

        Return True
    End Function

  #End Region

End Class

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

VB.NET 全般
    ' 正しい日付かどうかをチェックする
    If Validation.IsDate(2004, 02, 29) Then
        MessageBox.Show("正しい日付です")
    End If

関連するリファレンス

準備中です。

スポンサーリンク