[英]Java SimpleDateFormat parsing irregularities
我正在用Java執行一些日期解析,並且遇到了一些奇怪的行為。
我有一個日期字符串,如下所示:
String s = "Sun Aug 11 2013 11:00:00 -0700 (Pacific Daylight Time)"
我正在嘗試將其解析為一個日期對象,如下所示:
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss Z (zzzz)");
然后,我從sdf.parse(s)
打印出結果日期對象並得到:
Sun Aug 11 12:00:00 CDT 2013
我在中央時區,因此按原樣打印它是有道理的,但是CDT是-0500,所以解析的日期應該是13:00,而不是12:00。
奇怪的是,如果我刪除了多余的時區信息之一,則日期將正確解析。 使用格式"EEE MMM dd yyyy HH:mm:ss Z ('Pacific Daylight Time')"
或格式"EEE MMM dd yyyy HH:mm:ss '-0700' (zzzz)"
得出正確的日期:
Sun Aug 11 13:00:00 CDT 2013
此行為似乎只發生在夏時制時間之內的日期。 如果我改用初始日期格式來分析某個日期(例如12月),則會得到正確的結果。
我對要解析的日期格式的控制有限,它們可能來自多個時區。 以前有沒有人遇到過這種現象,是否有辦法在不更改日期字符串格式的情況下解決該問題? 我意識到時區的指定是多余的,但據我所知,它們並不是錯誤的。
過去,Java在處理夏時制和時區時確實存在一些錯誤,而且這肯定看起來像您發現的那樣。 這是什么版本的Java?
您可能想嘗試給Joda-Time一個嘗試,看看它是否可以正確處理給定的日期。
如果Joda沒有幫助,您可能需要嘗試預先准備一些日期字符串以刪除括號中的描述性時區,因為只有定義了一個時,它才起作用。 確實很奇怪!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.