2011-05-11 12 views
4

我住在北卡羅來納州,順便提一下,它位於東邊。所以我編譯並運行這段代碼,並打印出相同的內容。該文檔說,java.util.date嘗試反映UTC時間。Java.util.Date:嘗試理解UTC和ET更多

Date utcTime = new Date(); 
Date estTime = new Date(utcTime.getTime() + TimeZone.getTimeZone("ET").getRawOffset()); 
DateFormat format = new SimpleDateFormat("dd/MM/yy h:mm a"); 
System.out.println("UTC: " + format.format(utcTime)); 
System.out.println("ET: " + format.format(estTime)); 

而這就是我得到

UTC: 11/05/11 11:14 AM 
ET: 11/05/11 11:14 AM 

但是,如果我去這個website它試圖反映所有不同的時間,UTC和ET是不同的。我幹了什麼錯在這裏做

回答

7

這是因爲getRawOffset()是返回0 - 它也爲我「ET」,事實上TimeZone.getTimeZone("ET")基本上返回GMT。我懷疑這不是你的意思。

北卡羅來納州最好的奧爾森時區名稱是「America/New_York」,我相信。

請注意,您不應該將時區的原始偏移量添加到UTC時間 - 而應該設置格式器的時區。 A Date值並不真正瞭解時區...自1970年1月1日以來UTC始終只有毫秒。

所以你可以使用:

import java.text。 ; import java.util。;

Date date = new Date(); 
DateFormat format = new SimpleDateFormat("dd/MM/yy h:mm a zzz"); 

format.setTimeZone(TimeZone.getTimeZone("America/New_York")); 
System.out.println("Eastern: " + format.format(date)); 

format.setTimeZone(TimeZone.getTimeZone("Etc/UTC")); 
System.out.println("UTC: " + format.format(date)); 

輸出:

Eastern: 11/05/11 11:30 AM EDT 
UTC: 11/05/11 3:30 PM UTC 

我也建議你考慮使用Joda Time,而不是內置庫 - 這是一個更好的API。

+0

我還有一個關於時間的問題。 http://stackoverflow.com/questions/5968842/compare-the-current-est-to-2pm-est-how。你認爲你也可以幫助我? –

1

根據this post你HABE寫TimeZone.getTimeZone("ETS")代替TimeZone.getTimeZone("ET")

1

TimeZone.getTimeZone( 「ET」)。getRawOffset()是一個返回0,這就是爲什麼

1

東部標準時間的正確縮寫是「EST」,而不是「ET」。它看起來像getRawOffset()方法返回0,如果它通過一個未知的時區。

TimeZone.getTimeZone("EST").getRawOffset() 

此外,當您輸出utcTime變量時,您不輸出UTC時間。你正在輸出EST時間,因爲你住在那個時區。據我所知,Date類內部使用UTC存儲時間......但是,如果將其格式化以便將其輸出爲可讀的字符串,則需要考慮當前的語言環境/時區。