Java 使用时区和ZoneId类的时区ID之间的差异
在我的程序中,用户可以从我从Java 使用时区和ZoneId类的时区ID之间的差异,java,java-8,Java,Java 8,在我的程序中,用户可以从我从TimeZone.getAvailableIDs()获取的ID列表中选择时区。这个ID存储在数据库中,稍后我使用ZoneId.of(String ZoneId)获取ZoneId对象 但是今天在调试时,我意识到由TimeZone.getAvailableIDs()生成的一些ID不能被ZoneId.of(String ZoneId)识别,并抛出了一个“java.time.zoneRuleException”。例如,ZoneId.of(“EAT”)抛出异常 ZoneId类本
TimeZone.getAvailableIDs()
获取的ID列表中选择时区。这个ID存储在数据库中,稍后我使用ZoneId.of(String ZoneId)
获取ZoneId对象
但是今天在调试时,我意识到由TimeZone.getAvailableIDs()
生成的一些ID不能被ZoneId.of(String ZoneId)
识别,并抛出了一个“java.time.zoneRuleException”。例如,ZoneId.of(“EAT”)
抛出异常
ZoneId
类本身可以使用ZoneId.getAvailableZoneId()
生成区域ID列表。这会为我返回599个ID,但TimeZone.getAvailableIDs()
会返回627个ID
有人能给我解释一下区别吗?为什么我会得到两个不同的区域ID列表
我使用Java8
在java.util.TimeZone中不推荐使用短区ID。这
map允许通过(字符串,map)的继续使用ID
工厂法
因此,您应该使用同一方法的不同签名
ZoneId.of("EAT", ZoneId.SHORT_IDS)
或者你可以使用全名
ZoneId.of("Africa/Addis_Ababa")
谢谢你的澄清。我刚刚检查了一下,
ZoneId.getAvailableZoneIds()
和TimeZone.getAvailableIDs()
之间的差异只有28个三位数的ID(EST、HST、MST、ACT、AET、AGT、ART、AST、BET、BST、CAT、CNT、CST、CTT、EAT、ECT、IET、IST、JST、MIT、NET、NST、PLT、PNT、PRT、PST、SST、VST)。其余条目完全匹配。