公历日期验证问题



我试图验证用户在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;  
        }  
}

我没能在谷歌上找到任何相关的东西,所以任何帮助都会很棒!

对于Calendar类,虽然日期和年份编号的1..n (1 -based),月份0-11 (0 -based),所以十二月是而不是月号12,它是月号11

尝试调用您的方法,指定11(而不是12)作为month参数。

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

或者,使用常量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;  
     }  
 }

br

LocalDate.of( year , month , dayOfMonth )  // Catch exception `DateTimeParseException`
<标题> java.time h1> 代方法使用java。时间类,而不是麻烦的老GregorianCalendar类。

java.time.LocalDate类表示一个只有日期的值,没有时间和时区。

为了验证您的输入,尝试从这些数字组合一个LocalDate。与GregorianCalendar不同,LocalDate有相同的月份编号,1-12表示1月至12月。如果数字导致无效日期,则抛出DateTimeParseException供您捕获。

try {
    LocalDate ld = LocalDate.of( year , month , dayOfMonth ) ;
    return true ;  // true = Valid data entered for a date.
} catch ( DateTimeParseException e ) {
    return false;  // Exception caught, meaning invalid data-entry.
}

关于java.time

java。时间框架内置于Java 8及以后版本中。这些类取代了麻烦的旧的遗留日期时间类,如java.util.Date, Calendar, &SimpleDateFormat .

Joda-Time项目现在处于维护模式,建议迁移到java。时间类。

要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获得许多示例和解释。规格为JSR 310。

从哪里获取java。时间类?

  • Java SE 8Java SE 9,以及更高版本
    • 内置。
    • 标准Java API的一部分,捆绑实现。
  • Java 9增加了一些小的特性和修复。
  • Java SE 6Java SE 7
    • 大部分java。时间功能向后移植到Java 6;7在 ThreeTen-Backport
  • Android
    • ThreeTenABP项目专门为Android适配ThreeTen-Backport(上文提到)。
  • 参见如何使用ThreeTenABP…
  • ThreeTen-Extra项目扩展了java。有额外课程的时间。这个项目是将来可能添加到java.time的试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter等。

    相关内容

    • 没有找到相关文章

    最新更新