我正在運行Tomcat應用程序,並且需要顯示一些時間值。不幸的是,時間已經過去了一個小時。我看着它,發現我的默認TimeZone被設置爲:Java時區搞砸了
sun.util.calendar.ZoneInfo[id="GMT-08:00",
offset=-28800000,
dstSavings=0,
useDaylight=false,
transitions=0,
lastRule=null]
而不是太平洋時區。當我嘗試打印默認時區的display name時,會進一步顯示此消息,並且會顯示「GMT-08:00」,這似乎表明它未正確設置爲美國太平洋時區。我在Ubuntu Hardy Heron上運行,從Gutsy Gibbon升級。
是否有配置文件可以更新以告知JRE使用Pacific以及所有關聯的夏令時信息?我的機器上的時間顯示正確,所以它似乎不是操作系統範圍的錯誤配置。
好的,這是一個更新。一位同事建議我更新我的/ etc/profile中的JAVA_OPTS以包含「-Duser.timezone = US/Pacific」,該工作正常(我也看到了CATALINA_OPTS,我也更新了它)。實際上,我只是將變化導出到變量中,而不是使用新的/ etc/profile(稍後重新啓動會接受變化,我將變爲黃金)。
但是,我仍然認爲有一個更好的解決方案...應該有一個配置Java的地方,說什麼時區它使用,或者它是如何抓住時區。如果有人知道這樣的設置,這將是非常棒的,但現在這是一個體面的解決方法。
我使用的是1.5,它絕對是DST問題。如您所見,時區設置爲不使用夏令時。我的信念是它一般設置爲-8偏移量而不是特定的太平洋時區。由於通用-8偏移量沒有夏令時信息,因此當然不會使用夏令時信息,但問題是,我在哪裏告訴Java在啓動時使用太平洋時區?我不是在尋找一個編程解決方案,它應該是一個配置解決方案。
+1:我剛剛在完全更新的Ubuntu 9.10服務器上遇到了這個問題。 Sun JDK 1.6.0_15-b03,系統在美國/東部時區的安裝時進行配置。/etc/localtime包含/ usr/share/zoneinfo/US/Eastern的相同內容。 Java在2010年3月15日和4月25日之間的日期產生不正確的結果。用/ usr/share/zoneinfo/US/Eastern的符號鏈接替換文件後,我現在可以得到正確的結果。 我很驚訝這個bug是a)仍然開放,b)影響一個完全更新的Ubuntu服務器(9.10 - Karmic)。 – 2010-03-31 22:25:08
該錯誤在Java版本7(b72)中被記錄爲關閉。 – Raedwald 2013-07-20 15:37:17