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(从零开始),所以 December不是month number 12,而是 month number 11

尝试调用指定11(而不是12)月份参数的方法。

这个问题只是Calendar 类的许多迟钝方面之一

于 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 回答
1
于 2017-10-30T22:57:30.510 回答