2015-12-02 64 views
1

如果我有時區,例如「GMT-05:00」
我如何才能找到與使用喬達的當前位置的差異多少小時?
我使用這個代碼:計算與另一個時區的小時差

TimeZone tz = TimeZone.getTimeZone("GMT" + gmtTZ);
  
int offset = tz.getOffset((new DateTime().getMillis()));
  
System.out.println(「— > 「+offset/3600000d);
  

給我-5,但它並沒有考慮到我的時區的時間差。

+0

對不起,也許我只是誤解,但-5是如何意外的? – MrHug

+1

如何獲取當地時區('TimeZone.getDefault()'),做相同的計算,然後減去兩個? –

+0

@MrHug:不,因爲我提前7小時 – Jim

回答

1

閱讀getOffset方法的文檔。來自日期的Millis不包含任何有關時區的信息,並且getOffset需要millis參數才能確定此特定日期是否在夏令時內。如果是的話,你會多得一個小時。你這樣做的方式你永遠不會有所作爲,你的結果只能是-5/-4小時。

你甚至都不需要JodaTime:

TimeZone timezone = TimeZone.getTimeZone("GMT-5"); 
TimeZone localTimeZone = TimeZone.getDefault(); 

int timeZoneOffset = timezone.getOffset(System.currentTimeMillis()); 
int localTimeZoneOffset = localTimeZone.getOffset(System.currentTimeMillis()); 

int difference = Math.abs(timeZoneOffset - localTimeZoneOffset)/3600000; 

如果你想JodaTime只需更換System.currentTimeMillis()DateTime.now().getMillis()但我沒有看到比其他可測性的點。

+1

這將是更好的獲取當前時間一次(通過任一方法),並在兩個調用getOffset中使用。差異較小,但更正確。 –

+0

你是對的,但這只是關於概念 – Gaskoin

+0

也許lamen問題,但爲什麼'''TimeZone.getDefault();'會返回格林尼治標準時間的默認時區,而不是例如。在UTC? – Jim