2015-06-24 45 views
1

我有以下代碼:爪哇 - 拋出錯誤時的日期是無效的

SimpleDateFormat formatDDMMYYY = new SimpleDateFormat("dd/MM/yyyy"); 
Calendar quotationDay = Calendar.getInstance(); 
try { 
    quotationDay.setTime(formatDDMMYYY.parse("06/13/2015")); 
} catch (ParseException e) { 
    throw new RuntimeException("Quotation date is in incorrect format."); 
} 

的日期「2015年6月13日」不正確,因爲沒有13個月。 Java會在2016年自動解析它到下個月。有什麼辦法可以防止這種情況發生並拋出異常嗎?

+0

可能更好:http://stackoverflow.com/questions/15336200/why-does-simpledateformat-parse-incorrect-date – assylias

回答

6

您需要設置

formatDDMMYYY.setLenient(false); 

檢查spec

3

docs

寬嚴相濟說你應該關掉寬大

日曆具有解釋日曆兩種模式字段,寬鬆 和非寬鬆。當日歷處於寬鬆模式時,它會接受比其生成的日曆域值更大範圍的 。當日歷 重新計算日曆字段值以便get()返回時,所有 日曆字段都將被標準化。例如,寬鬆 GregorianCalendar的解釋MONTH == JANUARY,DAY_OF_MONTH == 32 2月1日

當日歷是在非寬鬆模式下,將引發 有在其日曆字段任何不一致的異常。例如,一個 GregorianCalendar始終會生成月份長度爲1到 之間的DAY_OF_MONTH值。如果任何 超出範圍的字段值已被設置,則非寬鬆的GregorianCalendar會在計算其時間或日曆字段值時拋出 異常。