簡體   English   中英

Java SimpleDateFormat返回意外結果

[英]Java SimpleDateFormat returns unexpected result

我正在嘗試使用Java的SimpleDateFormat來解析使用以下代碼的String。

public class DateTester {

    public static void main(String[] args) throws ParseException {
        String dateString = "2011-02-28";

        SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");

        System.out.println(dateFormat.parse(dateString));
    }
}

我期待一些解析錯誤。 但有趣的是,它會打印以下字符串。

Wed Jul 02 00:00:00 IST 195

無法推理出來。 有人可以幫忙嗎?

謝謝

默認情況下,SimpleDateFormat是寬松的,因此要使其失敗,您需要執行以下操作:

dateFormat.setLenient( false ) ;

在解析日期之前。 然后您將獲得異常:

java.text.ParseException: Unparseable date: "2011-02-28"

SimpleDateFormat已將2011解析為月份編號2011,因為月份( MM )是日期模式的第一部分。

如果你將2011年增加到28年,那么你將獲得195年。

2011個月是167年零7個月。 七月是第七個月。 你指定02為日,28為年,28 + 167 = 195,所以195年02 July 195是正確的。

在dateFormat上調用setLenient(false) 然后你會得到你的解析異常,如下所示:

groovy:000> df = new java.text.SimpleDateFormat("MM-dd-yyyy")
===> java.text.SimpleDateFormat@ac880840
groovy:000> df.setLenient(false)
===> null
groovy:000> df.parse("2011-02-28")
ERROR java.text.ParseException:
Unparseable date: "2011-02-28"
        at java_text_DateFormat$parse.call (Unknown Source)
        at groovysh_evaluate.run (groovysh_evaluate:2)
        ...

波西米亞是正確的,如果你沒有設置lenient屬性,那么JDK將向后彎曲,從而理解它給出的垃圾:

groovy:000> df = new java.text.SimpleDateFormat("MM-dd-yyyy");
===> java.text.SimpleDateFormat@ac880840
groovy:000> df.parse("13-01-2011")
===> Sun Jan 01 00:00:00 CST 2012
groovy:000> df.setLenient(false)
===> null
groovy:000> df.parse("13-01-2011")
ERROR java.text.ParseException:
Unparseable date: "13-01-2011"
        at java_text_DateFormat$parse.call (Unknown Source)
        at groovysh_evaluate.run (groovysh_evaluate:2)
        ...

暫無
暫無

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

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