請參見下面的代碼:SimpleDateFormat的行爲不一致
String timeString = "1980-01-01T14:00:00+0300";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date date2 = sdf.parse(timeString);
// sdf.getCalendar().get(Calendar.ZONE_OFFSET);
System.out.println(sdf.format(date2));
現在,我有+2h
偏移一個國家敢,+1
夏令時(目前)。 如果我運行這段代碼,因爲它是,它會打印
1980-01-01T13:00:00+0200
如果我取消對該行詢問該日曆的偏移,該程序的輸出是
1980-01-01T14:00:00+0300
是否知道這是爲什麼發生的事情,以及如何獲得一致的輸出?
爲了避免任何更多的東西不清: 由於我處理一些遺留代碼,JAVA 8是不是一種選擇。是的,這裏的關鍵點是爲什麼,而不是解決方法是什麼? 有2個爲什麼:
- 爲什麼我通過一個+0300 TZ,默認情況下我收到一個+0200一個? (除非另有指定,否則SimpleDateFormat應始終使用TimeZone.getDefault,除非 )。
- 爲什麼它給出了不同的答案,只是因爲我呼籲一個getter它的日曆實例。
它有什麼不一致嗎?當您不使用偏移量時,它會按照原樣顯示日期,並在使用時根據時區進行更改。 –
@RamanShrivastava調用一次getter不應該改變格式函數的輸出。 – wonderb0lt