我有一個Java類,它可以在夏令時打開和關閉時獲取位置的緯度/經度並返回GMT偏移量。我正在尋找一種簡單的方法來確定在Java中,如果當前日期處於夏令時,那麼我可以應用正確的偏移量。目前我只在美國時區執行此計算,但最終我想將其擴展到全球時區。確定夏時制(DST)在Java中是否爲指定日期活動
44
A
回答
56
這是在其被問這個問題了機器的答案:
TimeZone.getDefault().inDaylightTime(new Date());
服務器試圖弄清楚這一點,爲客戶將需要在客戶端的時區。請參閱@Powerlord回答爲什麼。
對於任何特定的時區
TimeZone.getTimeZone("US/Alaska").inDaylightTime(new Date());
9
TimeZone tz = TimeZone.getTimeZone("EST");
boolean inDs = tz.inDaylightTime(new Date());
3
你將不得不使用這些座標做更多的工作,並找出他們在哪個時區。一旦你知道哪個時區是isDayLight()方法是有用的。例如,您無法判斷-0500是美國/加拿大東部標準時間,美國/加拿大中部夏令時,美國/加拿大中部夏令時,哥倫比亞時間,澳大利亞時間,巴西英畝標準時間, ,ECT(厄瓜多爾時間)等...
其中一些可能會或可能不支持夏令時。
1
Joda Time包含處理方法,它將爲您計算偏移量。請參閱DateTimeZone.convertLocalToUTC(...)
爲了補充這一點,您需要使用緯度/經度信息查找當前時區。 GeoNames提供用於其Web服務的Java客戶端,以及一個簡單的web請求框架(即http://ws.geonames.org/timezone?lat=47.01&lng=10.2)
18
TL;博士
ZoneId.of("America/Montreal")
.getRules()
.isDaylightSavings(
Instant.now()
)
java.time
這裏是現代java.time(參見Tutorial)correct Answer版本mamboking。
- A
ZoneId
代表時區。班級知道指示DST是否適用於a particular time zone的規則。 ZoneRules
級別爲一個時區模擬所有歷史和未來的轉換。Instant
是UTC中時間軸上的一個時刻。- A
ZonedDateTime
是將ZoneId
應用於Instant
的結果。
示例代碼:
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("America/Montreal"));
…
ZoneId z = now.getZone();
ZoneRules zoneRules = z.getRules();
Boolean isDst = zoneRules.isDaylightSavings(now.toInstant());
注意如何在最後一行,我們不得不從我們ZonedDateTime
對象與簡單的調用toInstant
提取Instant
對象。
相關問題
- 1. mysql夏令時 - 確定是否爲真
- 2. Android確定設備上的給定日期/時間是否在DST下
- 3. 指定活動的日期
- 4. 確定給定時區的UTC時間是否在DST
- 5. 在指定時區導入日期時間,忽略夏令時
- 6. 確定夏令時是否激活? SQL Server
- 7. java - 確定一個日期是否是二進制的
- 8. 確定DataColumn是否僅爲日期
- 9. java日期夏令時
- 10. Jboss Java日期夏令時
- 11. Java日期和夏令時
- 12. 確定是否日期是在Excel
- 13. Zend日期DST Bug:測試日期是否爲「時間更改」日期
- 14. CakePHP中的夏令時(DST)
- 15. 確定Java中時區的DST開關(向前和向後)的日期?
- 16. 在Java中獲取夏時制轉換日期時間區域
- 17. XQuery - 確定給定時區中給定UTC時間是否屬於夏令時
- 18. 確定Oracle日期是否在週末?
- 19. 確定日期是週日/週末java
- 20. 檢查日期時間是否在夏令時中SQL
- 21. 如何確定是否在指定時間沒有用戶活動
- 22. Java中日期的不確定行爲
- 23. .NET:確定過去給定日期的DST狀態?
- 24. 確定給定日期(加或減DST班次小時數)的小時數
- 25. Javascript日期 - 如何知道DST是否在給定時區生效
- 26. 在.NET中忽略DST(夏令時)
- 27. 爲DST期間的iCalendar時區定義
- 28. Android夏令時(DST)問題
- 29. 檢測日期是否在MySql的夏令時中
- 30. 確定24小時日期時間是否在間隔內
目前我正在使用GeoTools庫和美國國家地圖集提供的shapefile(http://nationalatlas.gov/mld/timeznp.html)檢索時區信息。幸運的是,這爲我提供了一些附加信息 - 主要是2或4位數的時區符號(即AL,EA,EAno等)。不幸的是,這個值並不對應於Java時區使用的值,儘管我可以手動執行此映射。理想情況下,如果我將該文件替換爲世界時區shapefile,那麼該解決方案可能會有效,但這可能太過雄心勃勃。 – gelgamil 2009-06-29 21:21:41
timeznp020.txt列出了`Enumerated_Domain`s,其中包含每個所用縮寫的詳細信息;將它們映射到zoneinfo時區名稱不應太困難。我不確定Java中的時區名稱是否跨平臺,但我希望如此! – 2011-10-03 23:52:29
對此問題有用的另一個答案http://stackoverflow.com/a/1449510/311525 – Scott 2014-05-07 05:18:21