使用时区和区域 ID 类的时区 ID 之间的差异

  • 本文关键字:时区 ID 之间 区域 java java-8
  • 更新时间 :
  • 英文 :


在我的程序中,用户可以从我从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")

最新更新