要求是簡單地獲取給定時區的當前掛牆時間(包括正確的DST調整)。使用Joda時間獲得給定時區的當前掛牆時間
似乎有一些問題圍繞着這個盤旋,但我似乎無法找到一個直接的答案(在SO,喬達多克或谷歌搜索)與低摩擦的方式獲得牆的時間。這似乎是與給定的輸入(當前UTC時間和所需的TZ)我應該能夠鏈條從約達時間庫幾個方法來實現我想要什麼,但似乎在說的例子來評價+處理偏移的願望/在應用程序代碼轉換 - 我希望儘可能地避免這種情況,只需使用Jodas盡力而爲根據其設定的可用靜態TZ規則。
對於這個問題的目的,讓我們假設我不會使用(基於網絡或其他二進制文件)任何其他第三方服務,究竟什麼是可從JDK和JodaTime庫。
任何指針讚賞。
更新: 這實際上是一個代表我的失敗。我在陽光明媚的有計算基於請求經度UTC偏移,而這顯然是工作,你仍然需要區域信息以獲得正確的DST調整..
double aucklandLatitude = 174.730423;
int utcOffset = (int) Math.round((aucklandLatitude * DateTimeConstants.HOURS_PER_DAY)/360);
System.out.println("Offset: " + utcOffset);
DateTimeZone calculatedDateTimeZone = DateTimeZone.forOffsetHours(utcOffset);
System.out.println("Calculated DTZ: " + calculatedDateTimeZone);
System.out.println("Calculated Date: " + new DateTime(calculatedDateTimeZone));
System.out.println();
DateTimeZone aucklandDateTimeZone = DateTimeZone.forID("Pacific/Auckland");
System.out.println("Auckland DTZ: " + aucklandDateTimeZone);
System.out.println("Auckland Date: " + new DateTime(aucklandDateTimeZone));
打印
Offset: 12
Calculated DTZ: +12:00
Calculated Date: 2012-02-08T11:20:04.741+12:00
Auckland DTZ: Pacific/Auckland
Auckland Date: 2012-02-08T12:20:04.803+13:00
所以在這裏Auckland, NZ我們在DST期間+12 +13不過。
我的壞。儘管如此,謝謝你的答案,讓我看到了我的錯誤。
我寧願'DateTime.now(DateTimeZone區)'因爲我覺得它更明顯。 – 2012-07-26 08:36:39
順便說一句,調整時區的呼叫'withZone(myTimeZone)'。 – 2014-06-10 18:52:37