2011-11-08 25 views
0

爲什麼此代碼不會引發'ParseException'?當最後一個字符是非數字時,SimpleDateFormat無法引發異常

DateFormat formatter = new SimpleDateFormat("dd/mm/yyyy"); 
try { 
    String date = "01/01/200'"; 
    formatter.parse(date); 
} catch (ParseException ex) { 
    throw new ParseException("Formato de fecha inválido",0); 
} 

請解釋一下對我來說,我迷失了。並注意簡單報價'

+0

對我沒有錯誤http://ideone.com/Kq9Zj – Mob

+0

我知道,「爲什麼」沒有例外是我問的。 –

回答

4

因爲這是應該做的。 如果您檢查docs on DateFormat它說關於參數。

source - A String whose beginning should be parsed.

如果你想限制的格式,你必須使用正則表達式。

同時檢查的SimpleDateformat規則關於年:

For parsing, if the number of pattern letters is more than 2, the year is interpreted literally, regardless of the number of digits. So using the pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D.

+0

以「源」部分的清晰度作爲第一個答案... –

3

根據的Javadoc SimpleDateFormat

用於解析,如果模式字母的數量大於2,無論數字的數量如何,年份都按字面解釋。因此使用模式「MM/DD/YYYY」,「01/11/12」解析到1月11日,公元12

所以我懷疑這個解析年爲公元200

我只是跑你程序和那是怎麼回事。轉換後的Date是:

Date = Tue Jan 01 00:01:00 EST 200 
+0

感謝您的幫助 –

0

parse方法將忽略在解析結束日的任何非數字字符。

例如,如果解析"01/01/01asdsdf0'"很會照顧只的"01/01/01",而忽略文字...所以今年將是01

但是如果你嘗試分析"01/01/asdsdf0'"將引發異常,因爲沒有數字一年在場。

相關問題