2010-03-29 95 views
4

如何在倫敦獲得當前的本地掛鐘時間(1970年1月1日以來的毫秒數)?由於我的應用程序可以在任何位置的服務器上運行,因此我認爲我需要使用「歐洲/倫敦」的TimeZone。我還需要考慮夏令時,即應用程序應在「夏季」期間增加一小時。在倫敦獲得時間

我寧願使用標準的java.util庫。

這是正確的嗎?

TimeZone tz = TimeZone.getTimeZone("Europe/London") ; 
Calendar cal = Calendar.getInstance(tz); 
return cal.getTime().getTime() + tz.getDSTSavings(); 

感謝

+0

如果你正在寫一個服務器,共同範式總是在內部使用UTC時間,然後在UI中顯示它時使用DateFormatter格式化。 – Kylar 2010-03-29 18:22:25

+2

@Kylar:僅使用UTC不是特定於服務器應用程序,而應該由幾乎任何應用程序完成。 – Joey 2010-03-29 18:23:20

+1

我不會假設知道所有的應用程序;) – Kylar 2010-03-29 18:24:16

回答

9

你並不需要一個Calendar,只有TimeZone

TimeZone london = TimeZone.getTimeZone("Europe/London"); 
long now = System.currentTimeMillis(); 
return now + london.getOffset(now); 
4

其他人表示,這可能不是一個好主意 - 我相信這取決於你的情況,但使用UTC肯定是需要考慮的事情。但是,我認爲你已經錯過了一些東西:自1970年1月1日以來發生的秒數UTC(這是Unix時代總是如何定義的 - 實際上與倫敦相同,因爲在當日的偏移爲0)是所有這些表述均獲得:

System.currentTimeMillis() 
new Date().getTime() 
Calendar.getInstance().getTime().getTime() 

如果你仔細想想,因爲毫秒數特定時刻不會改變取決於哪個時區你」重新英寸

哦,一個d正常的建議 - 要獲得更好的日期和時間API,請參見Joda Time

+0

英國不也使用DST嗎?實際上,它與UTC有所不同。 – Joey 2010-03-29 18:39:53

+1

@JohannesRössel:DST與否,從時代開始經過的(毫秒)秒數與夏令時間無關。如果是6PM或7PM,* NOT *會改變自紀元以來經過的時間(毫秒)。分鐘不是一個固定的單位(你可以有59或61秒的分鐘),天不是一個固定的單位(你可以有23或25小時的一天),但秒和毫秒是一個固定的單位。這就是爲什麼你總是應該在(毫秒)秒內測量時間,並在紀元(毫秒)內存儲日期/時間。只有在向最終用戶顯示時進行轉換。 – SyntaxT3rr0r 2010-03-29 19:56:25

2

爲了得到當前的時間在倫敦:

SimpleDateFormat f = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z"); 
f.setTimeZone(TimeZone.getTimeZone("Europe/London")); 
System.out.println(f.format(GregorianCalendar.getInstance().getTime())); 
相關問題