我從服務器的日期形式E, dd MMM yyyy HH:mm:ss Z
其中時區是+0200
日期轉換:誤差隨時間
我解析它使用
myFormat.format(serverFormat.parse(dateString));
和我得到的時間錯了我自己的格式yyyy-MM-dd HH:mm:ss
:這是一小時前。所以,如果我得到10:00
轉換,我得到09:00
。爲什麼?
我從服務器的日期形式E, dd MMM yyyy HH:mm:ss Z
其中時區是+0200
日期轉換:誤差隨時間
我解析它使用
myFormat.format(serverFormat.parse(dateString));
和我得到的時間錯了我自己的格式yyyy-MM-dd HH:mm:ss
:這是一小時前。所以,如果我得到10:00
轉換,我得到09:00
。爲什麼?
我認爲,這裏的問題是DST - 夏令時。標準是冬季時間。現在是夏天,所以你得到1小時的差異。 您正在使用時區轉換語法+0200
,因爲它取決於國家/地區,因此它不支持夏令時。
您應該使用時區定義的語言環境特定語法,例如Europe/Amsterdam
而不是+0100
。除了採取TimeZone
類的API來看一看:
inDaylightTime(Date date)
useDaylightTime()
檢查最可能是問題原因的返回值的時區。
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));
嘗試
formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");
問題是,我在做一個RSS閱讀器,所以我不能做任何事情時區的格式,因爲它是在飼料中。如果我只是在我的代碼中添加缺少的小時,怎麼樣?我得到了10:00,我加了1,並且得到了正確的日期:11:00 – user1610075
你可以這樣做,但你應該小心。你怎麼知道要添加或不添加?如果您可能至少知道一些關於rss feed源的區域設置的提示,您可以嘗試區分它是否在DST中。否則,你可以做一些假設。例如,說夏令時是從4月1日到10月1日,大多數時候這對大多數國家都是可以的。 – AlexR