將字符串轉換爲UTC數據,然後轉換爲各種時區時遇到問題。看起來我的程序行爲有所不同,具體取決於我是否轉換爲EST或PST。這裏是我的代碼:Java日期轉換 - UTC到本地 - 根據時區的不同而不同
SimpleDateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
utcFormat.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));
Date date = utcFormat.parse("2014-08-18 17:00:17");
SimpleDateFormat localFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
localFormat.setTimeZone(java.util.TimeZone.getTimeZone("PST"));
System.out.println(localFormat.format(date));
如果我運行上面的代碼,這裏是我的輸出:
2014-08-18 10:00:17
這反映了7一小時內,所提供的UTC時間偏移:2014年8月18日17: 00:17。這是我所期望的。現在,如果我更改日期情節中字17點00分17秒(改變月份從八月至十一月),這裏是產生的輸出:
2014-11-18 09:00:17
這也沒關係,只要我可以告訴。輸出反映了與UTC的8小時偏移量,我認爲這是由於11月不是在夏令時,而8月是。
我遇到的問題是,如果將時區從「PST」更改爲「EST」,上面的相同代碼的工作方式不同。無論我的日期是在八月還是十一月,當我更改爲EST時,我都可以得到相同的時間輸出。
在這裏是使用EST和2014年8月18日17時00分17秒
2014-08-18 12:00:17
在這裏是使用EST和2014年11月18日17時00分17秒
2014-11-18 12:00:17
的輸出的輸出
在這兩種情況下,輸出均表示與UTC有5小時的偏移量,僅在11月份有意義,而不是在8月份。
任何人都可以向我解釋我做錯了什麼?
其實,'America/New_York'是官方名稱。 '美國/東部'是替代品或別名。請參閱[Wikipedia頁面列出適當的時區名稱](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones)。大部分官方主要名稱是「Continent/CityOrRegion」。 – 2014-09-20 06:36:11