回答
你剛剛步入一個非常雜亂佈滿荊棘。夏令時的規則很複雜,由人設定,所以沒有可以使用的算法。有關想法,請參閱此頁: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. 如何在Dynamics CRM的時區開始和結束夏令時?
- 2. 如何在Android中獲取開始日期和結束日期?
- 3. 如何獲取給定開始日期和結束日期的中間日期?
- 4. 從日期開始計算夏令時
- 5. 獲取某月份的開始日期和結束日期
- 6. 獲取重疊的開始日期和結束日期
- 7. 如何獲取一年的開始和結束日期?
- 8. 獲取DST開始日期和結束日期的任何時區
- 9. php,根據開始日期和月數獲取結束日期
- 10. 獲取從開始日期和結束日期
- 11. 開始日期和結束日期datepicker
- 12. 如何獲取日期和時間範圍選擇器的開始和結束?
- 13. 如何獲取當前季度的開始日期和結束日期..?
- 14. 如何在angularjs中獲取明智的開始日期和結束日期
- 15. 在Oracle中,如何檢測夏時制開始/結束的日期?
- 16. 獲取給定開始日期和結束日期的日期列表
- 17. glyphicon日曆開始和結束日期
- 18. 獲取指定日期之前的星期的開始和結束日期
- 19. 提取組中的開始日期和結束日期
- 20. 如何在Postgres中獲得daterange的開始和結束日期?
- 21. 我如何獲得去年的開始和結束日期?
- 22. 我如何獲得開始日期和結束日期之間的月和年
- 23. MySQL獲取季度的開始和結束日期按季度
- 24. 使用純javascript獲取下週的開始和結束日期
- 25. .NET Timespan對象:如何獲取開始和結束日期時間?
- 26. Rails - 獲取當前周和月的開始日期和結束日期
- 27. 如何獲取日期時間的開始時間和結束日期時間值?
- 28. 如何設置開始日期和結束日期?
- 29. Sql如何從5周開始日期和結束日期
- 30. 如何用SQL創建開始日期和結束日期?
對於任何絆倒這個職位的人。關於如何使用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