2013-10-26 75 views
1

我在美國的Ubuntu服務器中運行Java應用程序並配置CEST時區。Java中的時區不匹配

如果我在終端中運行Date命令,它會在CEST Zone時間返回日期 - 這是完美的。

但在Java中,如果我運行下面的代碼

System.out.println (new Date()); 

它返回我的時間EDT。我錯過了什麼配置。

+0

看到http://stackoverflow.com/questions/3010035/converting-a-utc-time-to-a-local-time光區-在-java嗎?RQ = 1 – Justin

回答

2

您必須小心從控制檯中獲取的顯示中解析日期對象,因爲它們使用運行此程序的虛擬機的默認TimeZone進行格式化(默認情況下,它從OS的時區繼承它)。 當然你也可以在通過加斯帕答案解釋提供您自己的時區。但在做的,所以我會強烈建議使用IANA時區標識符像美國/紐約,而不是EST。更是因爲其縮寫「標準」沒有考慮到天燈儲蓄賬戶。

所以,如果你簡單地打印在控制檯上的日期對象,你沒有得到預期的結果,機會是很高,你有你的服務器的時區設置錯誤的值或者你的操作系統設置爲錯誤的時區。

爲了改變JVM時區,你可以在啓動時使用此參數

-Duser.timezone="America/New_York" 
0

你說服務器配置在CEST時區,但根據Java,默認時區是EDT。 Java從操作系統獲取默認時區,因此您的服務器可能沒有正確設置在CEST中。

如果你要打印的日期以特定的時區,使用DateFormat並設置時區就可以了:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); 
df.setTimeZone(TimeZone.getTimeZone("CET")); 
System.out.println(df.format(new Date())); 

注:CEST不是根據我的爪哇(Java的7u45)一個有效的時區。你的意思是「CET」嗎? (CEST是CET的夏季變種,但如果你使用CET,Java將自動在夏季,如果合適的顯示時間)。