如何在Java中从时区ID获取国家代码?

3
 String zoneId = Calendar.getInstance().getTimeZone().toZoneId();

我想获得一个String[]数组,其中包含适用于特定区域的国家ISO代码,例如"AS","AL","AU"?


1
这个有意义吗?一个单一的时区有更多的国家...请参阅ZoneIds的javadocs:https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html - Paolof76
它无法编译,因为toZoneId()返回一个ZoneId(而不是一个String;但您可以附加.toString()来获得一个)。@Paolof76:如果区域/城市格式的区域ID是有意义的,例如夏威夷太平洋/檀香山,那么它应该是这样的。但我担心这将需要某种地理数据库。 - Ole V.V.
有没有任何第三方API或其他工具可以将“地区/城市”格式转换为相应的国家ISO代码或国家名称? - SABER
1个回答

6

我认为最好的替代方案是获取这些IANA文件:

那些文件的条目格式如下:
#codes  coordinates TZ  comments
AD      +4230+00131 Europe/Andorra
AE,OM   +2518+05518 Asia/Dubai
AF      +3431+06912 Asia/Kabul

如果我没记错的话,zone1970.tab 是较新的文件,包括一个时区被多个国家使用的情况,但你可以检查两个文件并看哪个可以解决你的问题。
还有iso3166.tab 文件,它将国家代码映射到它们各自的名称。
我不确定 Java 是否有直接读取这些文件的 API,但看着它们的格式,似乎很容易读取并找到您想要的信息。
如果您想将JVM的默认时区作为ZoneId对象获取,只需调用ZoneId.systemDefault()。如果您想要该时区的ID作为String(例如Europe/BerlinAmerica/New_York),只需调用ZoneId.systemDefault().getId()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接