[英]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/Montreal
, Africa/Casablanca
或Pacific/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 8及更高版本中。 這些類取代了麻煩的舊遺留日期時間類,如java.util.Date
, Calendar
和SimpleDateFormat
。
現在處於維護模式的Joda-Time項目建議遷移到java.time類。
要了解更多信息,請參閱Oracle教程 。 並搜索Stack Overflow以獲取許多示例和解釋。 規范是JSR 310 。
從哪里獲取java.time類?
ThreeTen-Extra項目使用其他類擴展了java.time。 該項目是未來可能添加到java.time的試驗場。 您可以在這里找到一些有用的類,比如Interval
, YearWeek
, YearQuarter
,和更多 。
“PDT”是Pacific Daylight Time的縮寫。 它與太平洋標准時間一起用於構成太平洋時區。
太平洋時區的時區標識符為"America/Los_Angeles"
。 你應該使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.