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

如何在java中从时区ID获取国家代码?,java,timezone,Java,Timezone,我想获取字符串[],该字符串具有适用于zoneId的国家/地区ISO代码,例如“AS”、“AL”、“AU”?我认为最好的选择是获取这些IANA文件: 这些文件包含以下格式的条目: String zoneId = Calendar.getInstance().getTimeZone().toZoneId(); 如果我没记错的话,zone1970.tab是较新的,它涵盖了一个时区被多个国家使用的情况,但您可以检查这两个时区,看看哪一个解决了您的问题 还有一种方法是将国家代码映射到各自的名

我想获取字符串[],该字符串具有适用于zoneId的国家/地区ISO代码,例如“AS”、“AL”、“AU”?

我认为最好的选择是获取这些IANA文件:

这些文件包含以下格式的条目:

 String zoneId = Calendar.getInstance().getTimeZone().toZoneId();
如果我没记错的话,
zone1970.tab
是较新的,它涵盖了一个时区被多个国家使用的情况,但您可以检查这两个时区,看看哪一个解决了您的问题

还有一种方法是将国家代码映射到各自的名称

我不确定Java是否有直接读取这些文件的API,但看看它们的格式,似乎很难读取它们并找到所需的信息


快速提示:无需调用
Calendar.getInstance().getTimeZone().toZoneId()


如果希望JVM的默认时区作为
ZoneId
对象,只需调用
ZoneId.systemDefault()
。如果您希望分区的ID为
字符串
(例如
欧洲/柏林
美国/纽约
),只需调用
ZoneId.systemDefault().getId()

,这有意义吗?一个时区有更多的国家。。。请参阅ZoneIds的javadocs:它不会编译,因为
toZoneId()
返回一个
ZoneId
(不是
String
;但您可以附加
.toString()
来拥有一个)@Paolof76:如果区域ID是区域/城市格式,例如,应该是太平洋/檀香山格式,那么它是有意义的。但我担心这需要一个地理数据库。是否有第三方api或其他东西可以将“地区/城市”格式转换为相应的国家ISO代码或国家名称。
#codes  coordinates TZ  comments
AD      +4230+00131 Europe/Andorra
AE,OM   +2518+05518 Asia/Dubai
AF      +3431+06912 Asia/Kabul