在我的程序中,用户可以从我从TimeZone.getAvailableIDs()
获得的ID列表中选择一个时区。此 ID 存储在数据库中,稍后我使用ZoneId.of(String zoneId)
来获取 ZoneId 对象。
但是今天在调试时,我意识到TimeZone.getAvailableIDs()
生成的一些ID无法被ZoneId.of(String zoneId)
识别,并且抛出了"java.time.zone.ZoneRulesException"。例如,ZoneId.of("EAT")
引发异常。
ZoneId
类本身可以使用ZoneId.getAvailableZoneIds()
生成区域 ID 列表。 这为我返回 599 个 ID,但TimeZone.getAvailableIDs()
返回 627 个 ID。
有人可以向我解释一下区别吗?为什么我会收到 2 个不同的区域 ID 列表?
我使用Java 8。
来自 ZoneId 的文档
短区 ID 的使用已在java.util.TimeZone 中被弃用。这 映射允许通过
of(String, Map)
继续使用 ID 工厂方法。
所以你应该使用同一方法的不同签名
ZoneId.of("EAT", ZoneId.SHORT_IDS)
或者您可以使用全名
ZoneId.of("Africa/Addis_Ababa")