2012-09-02 50 views
0

我從服務器的日期形式E, dd MMM yyyy HH:mm:ss Z其中時區是+0200日期轉換:誤差隨時間

我解析它使用

myFormat.format(serverFormat.parse(dateString)); 

和我得到的時間錯了我自己的格式yyyy-MM-dd HH:mm:ss:這是一小時前。所以,如果我得到10:00轉換,我得到09:00。爲什麼?

回答

1

我認爲,這裏的問題是DST - 夏令時。標準是冬季時間。現在是夏天,所以你得到1小時的差異。 您正在使用時區轉換語法+0200,因爲它取決於國家/地區,因此它不支持夏令時。

您應該使用時區定義的語言環境特定語法,例如Europe/Amsterdam而不是+0100。除了採取TimeZone類的API來看一看:

  • inDaylightTime(Date date)
  • useDaylightTime()
+0

問題是,我在做一個RSS閱讀器,所以我不能做任何事情時區的格式,因爲它是在飼料中。如果我只是在我的代碼中添加缺少的小時,怎麼樣?我得到了10:00,我加了1,並且得到了正確的日期:11:00 – user1610075

+0

你可以這樣做,但你應該小心。你怎麼知道要添加或不添加?如果您可能至少知道一些關於rss feed源的區域設置的提示,您可以嘗試區分它是否在DST中。否則,你可以做一些假設。例如,說夏令時是從4月1日到10月1日,大多數時候這對大多數國家都是可以的。 – AlexR

0

檢查最可能是問題原因的返回值的時區。

DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");  
formatter.setTimeZone(TimeZone.getTimeZone("GMT+2")); 

System.out.println(formatter.format(serverFormat.parse(dateString)); 
0

嘗試

formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");