[英]Java Calendar how to validate date
我正在嘗試驗證給定的日期,但是我不希望這樣。 用戶輸入一個日期,然后將其解析並傳遞給數組,我試圖驗證該日期是否是正確的日期(考慮leap年,2月等),而無需使代碼過長。
Calendar calendar = new GregorianCalendar(getValidYear(), getValidMonth() - 1, getValidDay());
if( validYear < 2010 )
{
throw new InvalidDateException("Year must be greater than 2009");
} else {
if(validMonth < 1 || validMonth > 12 )
{
throw new InvalidDateException("Month value must be greater than or equal to 1 or less than or eqaul to 12");
} else {
if(validDay > calendar.getActualMaximum(Calendar.DAY_OF_MONTH) || validDay <= 0)
{
throw new InvalidDateException(String.format ("Day value must be greater than 0 and less than or equal to %s ",
calendar.getActualMaximum(Calendar.DAY_OF_MONTH) ) );
}
}//end nested if month
}//end nested IF year
}
如果我將2018/02/33放入並打印出來以表示例外,則會顯示日期為2018年3月5日,而Im不能完全確定這些數字的來源。 解析日期的代碼是
String dateGiven[] = validDate.split("/");
validYear = Integer.parseInt(dateGiven[0]);
validMonth = Integer.parseInt( dateGiven[1] );
validDay = Integer.parseInt( dateGiven[2] );
當我構建字符串以顯示日期時,它可以正確打印,但是它不適用於Calendar和Im,我不確定Im在做什么。 任何幫助表示贊賞!
使用Java 8時間功能會更容易:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate date = LocalDate.parse("2018/02/33", formatter);
當日期無效時將導致DateTimeException
:
java.time.DateTimeException: Invalid value for DayOfMonth (valid values 1 - 28/31): 33
默認情況下, Calendar
寬大。 從其方法setLenient
的文檔中引用:
如果采用寬大的解釋,則將諸如“ 1996年2月942年”之類的日期視為等同於1996年2月1日之后的第941天。使用嚴格的(非寬容)解釋,這樣的日期將引發異常。 默認值為寬松。
如果要在Calendar
上設置無效日期時收到異常,請使用setLenient(false);
。
否則,2018/02/33將被解釋為2月1日之后的32天,即3月5日。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.