簡體   English   中英

當格式設置為 dd/mm/yyyy 時,SimpleDateFormat 似乎允許 yy 年

[英]SimpleDateFormat seems to allow a year of yy when the format is set to dd/mm/yyyy

如果我有這個:

private static final String DATE_FORMAT = "dd/MM/yyyy";
DateFormat formatter = new SimpleDateFormat(DATE_FORMAT);
formatter.setLenient(false);
formatter.parse("01/01/98");

如果傳入 2 位數年份,我的應用程序是否應該拋出異常? 這似乎沒有任何問題。

SimpleDateFormat用於從字符串解析日期和從日期生成字符串。 格式字符串的解釋因這些用法而異。 在您的情況下,您正在從字符串中解析日期。 98是一個合法值,因為您使用的是yyyy ,所以按字面意思解釋(即 98 AD)。 如果您將yyyy替換為yyy ,則解析應將 98 解釋為 1998。如果您需要 4 位日期,則需要添加一些驗證碼來執行此操作。

請注意, setLenient不會影響此處的任何內容,因為每個 position 中的值都是合法的。 position 年不需要 4 位數字(也不限於 4 位數字)。 如果解釋不寬松並且您將其傳遞給“1998/04/12”,它將引發異常,因為 1998 不在 1-12 的范圍內。 如果您設置 lenient 那么它將修改值以使其進入范圍(1998 變為 6)並向前沖鋒。 由於年份沒有實際界限,因此對 position 年份沒有影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM