回答
你剛剛步入一個非常雜亂佈滿荊棘。夏令時的規則很複雜,由人設定,所以沒有可以使用的算法。有關想法,請參閱此頁:http://home.tiscali.nl/~t876506/TZworld.html。這隻顯示目前的規則。如果您想以編程方式或過去的日期獲取規則,則需要直接查詢tz數據庫。這並不容易也不重要,而且這個過程需要花費更長的時間來進行解釋(另外,我必須弄清楚:)),但您需要開始使用的信息位於此頁面上:http://www.twinsun.com/tz/tz-link.htm。
如果你正在做的時間計算,需要採取移位考慮,它會更容易,只需使用喬達時間。這裏有一個鏈接:http://joda-time.sourceforge.net/。它具有所有的tz數據庫信息,所以你不必解析它。您需要保持最新狀態,因爲規則會定期更改。
作爲一個側面說明,有可能是查詢夏令開始和結束日期出喬達時間對於給定的時區的方式,但我找不到它。
有沒有辦法直接做到這一點,但你可以使用TimeZone.isDaylightTime(日期),如:
TimeZone tz = TimeZone.getTimeZone ("America/Denver") ;
Date date = new GregorianCalendar (2010, 10, 15).getTime() ;
if (tz.isDaylightTime (date)) {
// dst in effect code
}
else {
// dst not in effect code
}
當然,得到的開始日期(如果那是你真的需要什麼) ,你需要迭代給定年份的所有日期並檢查每個日期......這將是非常低效的。另外,正如上面的答案中所指出的,據我所知,夏時制時間信息被編譯到java.util庫中,所以如果某個特定市鎮改變了它在dst開始/結束時的規則,你將得到不正確的結果。
另外,似乎在Android中java.util.TimeZone中實現(至少在2.2)斷裂。例如
TimeZone denver = TimeZone.getTimeZone ("America/Denver") ;
TimeZone phoenix = TimeZone.getTimeZone ("America/Phoenix") ;
== true; //它不應該
在Eclipse的模擬下運行,denver.hasSameRules(phoenix)返回true,它應該返回false:兩者都是格林威治標準時間-7:00,但菲尼克斯不使用dst。我無法訪問任何Android設備來測試這是否只是模擬器的問題。我實際上開始搜索這個檔案,爲這個丹佛==鳳凰問題的答案,並遇到你的帖子,所以認爲我會回答。
- 1. 計算夏令時開始和結束的日期和時間?
- 2. 如何獲取日期時間月開始和結束日期?
- 3. 如何獲取本週的開始日期和結束日期?
- 4. 如何在Dynamics CRM的時區開始和結束夏令時?
- 5. 如何在Android中獲取開始日期和結束日期?
- 6. SQL:如何獲取周開始日期和周結束日期
- 7. 如何在sql中獲取開始日期和結束日期?
- 8. 獲取本週的開始日期和結束日期(星期一從星期一開始,星期日結束)
- 9. 如何獲取給定開始日期和結束日期的中間日期?
- 10. 如何獲取開始日期和結束日期之間的每週日期
- 11. 從日期開始計算夏令時
- 12. 獲取PHP DatePeriod對象的開始日期和結束日期?
- 13. 獲取開始日期和結束日期的簡單方法
- 14. 獲取某月份的開始日期和結束日期
- 15. 獲取重疊的開始日期和結束日期
- 16. 如何在夏令時的時區選擇結束日期?
- 17. 如何獲取一年的開始和結束日期?
- 18. 如何獲得開始和結束日期之間的時間
- 19. 獲取DST開始日期和結束日期的任何時區
- 20. 獲取從開始日期和結束日期
- 21. php,根據開始日期和月數獲取結束日期
- 22. 如何用momentjs獲取開始和結束日期?
- 23. 開始日期和結束日期datepicker
- 24. 開始日期和結束日期
- 25. 如何獲取日期和時間範圍選擇器的開始和結束?
- 26. 如何獲取EKEventStore函數的開始日期,結束日期和位置
- 27. 如何在Javascript中獲取月份的開始日期和結束日期?
- 28. 如何獲取當前月份的開始日期和結束日期(Swift 3)
- 29. 如何在angularjs中獲取明智的開始日期和結束日期
- 30. 如何獲取當前季度的開始日期和結束日期..?
對於任何絆倒這個職位的人。關於如何使用Joda-Time來獲取下一個時區轉換,還有另一個關於stackoverflow的答案:http://stackoverflow.com/questions/1449500/get-daylight-saving-transition-dates-for-time-zones-in- java的 – Mike 2011-08-17 15:22:24