2015-07-03 95 views
4

我有以下行:SimpleDateFormat的行爲

final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
Date d = simpleDateFormat.parse("2004-52-05"); 

我期望的異常將在第2行被拋出,因爲「52」不是一個有效的一個月,但代碼運行和日期保存在d對象是

Sat Apr 05 00:00:00 EEST 2008 

有人可以解釋我爲什麼嗎?

+1

我相信這是因爲它被設置爲52個月,這將是2008年4月(4年4個月)。爲什麼沒有錯誤的人可以回答。 – AlasdairCM

+0

@Hiru比我的更好的解釋! – AlasdairCM

回答

9

如果要創建嚴格匹配 模式的日期對象,請將lenient設置爲false。

從的Javadoc

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

請參閱本作的更多信息lenitent

所以添加這個..

simpleDateFormat.setLenient(false); 

這會拋出一個Exception像你期待的那樣。

java.text.ParseException: Unparseable date: "2004-52-05"