java 如何管理不直接支持的时区

how to manage the timezone which are not directly supported in java

我们通过传递 id 字符串获取 ZoneId 对象 -> ZoneId.of("US/Alaska")

在传递位置名称后从 java 获取时区 ID 时,我们收到错误 "Exception in thread "main" java.time.zone.ZoneRulesException: Unknown time-zone ID: EST"

我们得到了多个位置的异常,例如 -> EST, America/Argentina, America/Indiana, America/Kentucky, America/North_Dakota

处理此类情况的最佳方法是什么?通过传递位置 Id 来获取 ZoneId 对象是个好主意吗?

您应该指定城市而不是国家(大多数是城市),例如阿根廷的哪个城市?

America/Argentina/Buenos_Aires
America/Argentina/Catamarca
America/Argentina/ComodRivadavia
America/Argentina/...

可以在此处找到有效的 Java 时区列表(请参阅评论以获得更好的参考):
https://garygregory.wordpress.com/2013/06/18/what-are-the-java-timezone-ids/


更新:

为了获取所有可用的区域 ID:

Set<String> zoneIds = ZoneId.getAvailableZoneIds();
System.out.println("Available Zone Ids: \n" + String.join("\n", zoneIds));