[英]Java: Gregorian Calendar date validation issue
我正在嘗試使用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;
}
}
我無法在谷歌上發現任何相關內容,所以任何幫助都會很棒!
隨着日歷類,雖然日子,年歲編號為1..n
(一類),幾個月編號0-11
(從零開始),所以十二月不是一個月數12
,它是月號11
。
嘗試調用您的方法為month參數指定11
(而不是12
)。
這個問題僅僅是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;
}
}
LocalDate.of( year , month , dayOfMonth ) // Catch exception `DateTimeParseException`
現代方法使用java.time類而不是麻煩的舊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 8及更高版本中。 這些類取代了麻煩的舊遺留日期時間類,如java.util.Date
, Calendar
和SimpleDateFormat
。
現在處於維護模式的Joda-Time項目建議遷移到java.time類。
要了解更多信息,請參閱Oracle教程 。 並搜索Stack Overflow以獲取許多示例和解釋。 規范是JSR 310 。
從哪里獲取java.time類?
ThreeTen-Extra項目使用其他類擴展了java.time。 該項目是未來可能添加到java.time的試驗場。 您可以在這里找到一些有用的類,比如Interval
, YearWeek
, YearQuarter
,和更多 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.