簡體   English   中英

Java TimeZone.getTimeZone(“PDT”)無效

[英]Java TimeZone.getTimeZone(“PDT”) not working

它返回GMT的默認時區。

使用帶有“z”的SimpleTimeFormat作為時區,它打印“PDT”。 但是“PDT”不在TimeZone.getAvailableIDs()返回的列表中。 真奇怪!

任何人都知道為什么“PDT”不是標准的tz? 怎么處理這個? 有人調用我的API傳遞“PDT”作為時區。 謝謝。

PDT不是時區

任何人都知道為什么“PDT”不是標准的tz?

因為“PDT”不是時區!

“PDT”是媒體使用的偽時區,用於模糊地指示一組時區加上指示符,如果他們打算在夏令時(DST)啟用或不啟用( PST )期間。 避免這些2-4字母代碼,因為它們不是真正的時區,不是標准化的,甚至不是唯一的(!)。

適當的時區名稱

continent/region的格式指定適當的時區名稱 ,例如America/MontrealAfrica/CasablancaPacific/Auckland

通過PDT ,這些時區中的任何一個,或更多,可能是:

ZoneId z = ZoneId.of( "America/Los_Angeles" ) ;
ZoneId z = ZoneId.of( "America/Tijuana" ) ;
ZoneId z = ZoneId.of( "America/Whitehorse" ) ;

但是PDT可能並不意味着這個區域,因為亞利桑那州沒有參與夏令時(DST)的廢話,而中間的D意味着DST。

ZoneId z = ZoneId.of( "America/Phoenix" ) ;

避免遺留日期時間類

避免使用SimpleTimeFormat類,因為它是現在遺留下來的麻煩的舊日期時間類的一部分,取而代之的是java.time類。 請改用DateTimeFormatter

也避免使用TimeZone ZoneId替換。

傳遞ZoneId ,而不是字符串

有人調用我的API傳遞“PDT”作為時區。

更改您的API以將ZoneId作為參數,而不僅僅是String。 這可確保有效值並為您提供類型安全性


關於java.time

java.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊遺留日期時間類,如java.util.DateCalendarSimpleDateFormat

現在處於維護模式Joda-Time項目建議遷移到java.time類。

要了解更多信息,請參閱Oracle教程 並搜索Stack Overflow以獲取許多示例和解釋。 規范是JSR 310

從哪里獲取java.time類?

ThreeTen-Extra項目使用其他類擴展了java.time。 該項目是未來可能添加到java.time的試驗場。 您可以在這里找到一些有用的類,比如IntervalYearWeekYearQuarter ,和更多

“PDT”是Pacific Daylight Time的縮寫。 它與太平洋標准時間一起用於構成太平洋時區。

太平洋時區的時區標識符為"America/Los_Angeles" 你應該使用它。

閱讀時區標簽wikiWikipedia關於tz數據庫的文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM