亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 8 時區 ZoneRulesException:未知時區 ID:EST

Java 8 時區 ZoneRulesException:未知時區 ID:EST

搖曳的薔薇 2023-06-04 15:30:02
“EST”是來自 TimeZone.getAvailableIDs() 的時區 ID 之一;但TimeZone.getAvailableIDs();  // contains EST ZoneId.of("EST")java.time.zone.ZoneRulesException:未知時區 ID:EST
查看完整描述

3 回答

?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

嘗試這個:

ZoneId.of("EST", ZoneId.SHORT_IDS);

說明:ZoneID.SHORT_IDS 將棄用的 3 字母代碼映射到常規代碼,出于某種原因,必須明確指定它才能生效。

來自 JDK javadoc:“在 TimeZone 中不推薦使用短區域 ID”。


查看完整回答
反對 回復 2023-06-04
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

您正在混合使用新舊 API。

TimeZone.getAvailableIDs()返回可以解析的時區 ID?TimeZone.getTimeZone(String ID)。

ZoneId.getAvailableZoneIds()返回可以解析的區域 ID?ZoneId.of(String zoneId)。

如果比較 2 的結果,您會看到:

public static void main(String[] args) {

? ? Set<String> timeZones = Set.of(TimeZone.getAvailableIDs());

? ? Set<String> zoneIds = ZoneId.getAvailableZoneIds();

? ? System.out.println("Extra TimeZone's: " + diff(timeZones, zoneIds));

? ? System.out.println("Extra ZoneId's: " + diff(zoneIds, timeZones));

}

static Set<String> diff(Set<String> a, Set<String> b) {

? ? Set<String> diff = new TreeSet<>(a);

? ? diff.removeAll(b);

? ? return diff;

}

輸出 (jdk-11.0.1)


Extra TimeZone's: [ACT, AET, AGT, ART, AST, BET, BST, CAT, CNT, CST, CTT, EAT, ECT, EST, HST, IET, IST, JST, MIT, MST, NET, NST, PLT, PNT, PRT, PST, SST, VST]

Extra ZoneId's: []

如您所見,ZoneId.getAvailableZoneIds()并不聲稱支持EST,只是TimeZone.getAvailableIDs()支持。


查看完整回答
反對 回復 2023-06-04
?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

來自JavadocTimeZone

三字母時區 ID

為了與 JDK 1.1.x 兼容,還支持其他一些三字母時區 ID(例如“PST”、“CTT”、“AST”)。但是,它們的使用已被棄用,因為同一個縮寫經常用于多個時區(例如,“CST”可能是美國“中部標準時間”和“中國標準時間”),Java 平臺只能識別其中一個他們。

ZoneId不同于TimeZone,并刪除了這些有問題的時區。

America/New_York如果這就是您的意思,請改用。


查看完整回答
反對 回復 2023-06-04
  • 3 回答
  • 0 關注
  • 386 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號