3

Javaでグレゴリオ暦を使用してユーザーが入力した日付を検証しようとしています(これは必須です)が、12月に日付をテストすると、以下のエラーが発生します。

Exception in thread "main" java.lang.IllegalArgumentException: MONTH   
        at java.util.GregorianCalendar.computeTime(Unknown Source)  
        at java.util.Calendar.updateTime(Unknown Source)  
        at java.util.Calendar.getTimeInMillis(Unknown Source)  
        at java.util.Calendar.getTime(Unknown Source)

以下のコード

public static boolean  ValidDate (int Day, int Month, int Year)  
    GregorianCalendar Date = new GregorianCalendar();  
    Date.setLenient(false);  
    Date.set(Year, Month, Day, 0, 0, 0);  
    try{  
        Date.getTime();  
        return true;  
        }catch (Exception e){  
            System.out.println("Date is invalid please try again");   
            return false;  
        }  
}

私はグーグルに関連するものを見つけることができなかったので、どんな助けも素晴らしいでしょう!

4

3 に答える 3

9

Calendar クラスでは、日と年には番号が付けられますが1..n(1 ベース)、月には番号が付けられ0-11ます (0 ベース) ため、12 月は月番号ではなく月番号です。1211

month パラメーターに11( の代わりに) を指定してメソッドを呼び出してみてください。12

この問題は、Calendar クラスの多くの遅れた側面の1 つにすぎません。

于 2011-10-04T01:02:57.127 に答える
3

または、さらに良いことに、定数を使用しCalendar.DECEMBERます。カバーの下で 11 か 12 かどうかを心配する必要はありません。

Java コーディング標準を学び、それに従ってください。私はこのように書きます:

public static boolean  isvalidDate (int day, int month, int year)  
    Calendar calendar = Calendar.getInstance();
    calendar.setLenient(false);  
    calendar.set(year, month, day, 0, 0, 0);  
    try {  
        date.getTime();  
        return true;  
     } catch (Exception e) {  
        return false;  
     }  
 }
于 2011-10-04T01:06:36.007 に答える