2011-09-02 73 views
15

我試圖在android中獲取UTC偏移量。由於模擬器不斷返回0,我不知道我是否正確地做到了這一點。如何在秒鐘內獲取UTC偏移量android

Calendar c=Calendar.getInstance(); 
     TimeZone tz=c.getTimeZone(); 
     int offsetFromUtc=tz.getOffset(0)/1000; 

當我把0放在tz.getOffset中,這意味着我只想從gmt中得到秒數。 讓我知道我在做什麼是正確的。謝謝

回答

42

時區偏移量可能會在一年中發生變化,也許最常見的原因是夏令時。而不是將0至TimeZone.getOffset()的使用當前時間來得到當前偏移,創建一個新的日期,並得到其時間價值:

TimeZone tz = TimeZone.getDefault(); 
Date now = new Date(); 
int offsetFromUtc = tz.getOffset(now.getTime())/1000; 

模擬器默認爲UTC,嘗試檢查可用的時區進行測試。您還可以通過時區開關設置時區,check the documentation用於時區。

+0

我忘了夏令時,感謝您的高舉 –

+0

這實際上並不完整。並非所有的時區都是全天候的,委內瑞拉的時區都是小數點,例如-4.5。這應該是一個float/double而不是int。 – Dev2rights

+2

[getOffset](http://developer.android.com/reference/java/util/TimeZone.html#getOffset(long))爲分數時區返回int,精度很高,一直到秒。 –

4

模擬器的默認時區是格林尼治標準時間,這意味着您將始終得到0的偏移量。 您的代碼看起來很好(我沒有嘗試它)。 嘗試將模擬器的時區更改爲其他內容並檢查您的代碼。 看一看這個開放的帖子:Link