2011-07-20 74 views
7

我需要在不同時區的兩個日期之間獲得時間差。目前我正在這樣做:Android如何獲得android中兩個時區之間的時差?

Calendar c1=Calendar.getInstance(TimeZone.getTimeZone("EDT")); 
Calendar c2=Calendar.getInstance(TimeZone.getTimeZone("GMT")); 
String diff=((c2.getTimeInMillis()-c1.getTimeInMillis())/(1000*60*60))+" hours"; 
new AlertDialog.Builder(this).setMessage(diff).create().show(); 

我得到0小時。我究竟做錯了什麼?

回答

11

getTimeInMillis()返回自UTC爲的紀元以來的毫秒數。換句話說,時區與它無關。

我懷疑你真正想要的:

long currentTime = System.currentTimeMillis(); 
int edtOffset = TimeZone.getTimeZone("EDT").getOffset(currentTime); 
int gmtOffset = TimeZone.getTimeZone("GMT").getOffset(currentTime); 
int hourDifference = (gmtOffset - edtOffset)/(1000 * 60 * 60); 
String diff = hourDifference + " hours"; 
+0

什麼在夏時制的情況下?會處理它嗎? – Gugan

+1

@Gugan:我不知道如果您使用時區名稱的縮寫會發生什麼 - 但是如果您給它一個全時區ID,例如「歐洲/倫敦」,那將確實可以處理夏令時。 –

+0

謝謝喬恩。我會查一下。 – Gugan

0

喬恩接近,但由於字符限制我不能編輯他的答案。這是相同的代碼,但在東部標準時間將「EDT」更改爲「EST」。

long currentTime = System.currentTimeMillis(); 
int edtOffset = TimeZone.getTimeZone("EST").getOffset(currentTime); 
int gmtOffset = TimeZone.getTimeZone("GMT").getOffset(currentTime); 
int hourDifference = (gmtOffset - edtOffset)/(1000 * 60 * 60); 
String diff = hourDifference + " hours"; 

但是,這個解決方案主要假設TimeZone.getAvailableIDs()在它的字符串數組中都有「EST」和「GMT」。如果該方法不包含那些時區字符串,它將返回0偏移量。

相關問題