我试图验证用户在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 8, Java SE 9,以及更高版本
- 内置。
- 标准Java API的一部分,捆绑实现。
Java 9增加了一些小的特性和修复。
- 大部分java。时间功能向后移植到Java 6;7在 ThreeTen-Backport 。
- ThreeTenABP项目专门为Android适配ThreeTen-Backport(上文提到)。
Interval
、YearWeek
、YearQuarter
等。
标题>