3 回答

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊
嘗試這個(gè):
ZoneId.of("EST", ZoneId.SHORT_IDS);
說(shuō)明:ZoneID.SHORT_IDS 將棄用的 3 字母代碼映射到常規(guī)代碼,出于某種原因,必須明確指定它才能生效。
來(lái)自 JDK javadoc:“在 TimeZone 中不推薦使用短區(qū)域 ID”。

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊
您正在混合使用新舊 API。
TimeZone.getAvailableIDs()
返回可以解析的時(shí)區(qū) ID?TimeZone.getTimeZone(String ID)
。
ZoneId.getAvailableZoneIds()
返回可以解析的區(qū)域 ID?ZoneId.of(String zoneId)
。
如果比較 2 的結(jié)果,您會(huì)看到:
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: []
如您所見(jiàn),ZoneId.getAvailableZoneIds()并不聲稱(chēng)支持EST,只是TimeZone.getAvailableIDs()支持。

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
來(lái)自JavadocTimeZone
:
三字母時(shí)區(qū) ID
為了與 JDK 1.1.x 兼容,還支持其他一些三字母時(shí)區(qū) ID(例如“PST”、“CTT”、“AST”)。但是,它們的使用已被棄用,因?yàn)橥粋€(gè)縮寫(xiě)經(jīng)常用于多個(gè)時(shí)區(qū)(例如,“CST”可能是美國(guó)“中部標(biāo)準(zhǔn)時(shí)間”和“中國(guó)標(biāo)準(zhǔn)時(shí)間”),Java 平臺(tái)只能識(shí)別其中一個(gè)他們。
ZoneId
不同于TimeZone
,并刪除了這些有問(wèn)題的時(shí)區(qū)。
America/New_York
如果這就是您的意思,請(qǐng)改用。
添加回答
舉報(bào)