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

SAB*_*BER 3 java timezone

 String zoneId = Calendar.getInstance().getTimeZone().toZoneId();
Run Code Online (Sandbox Code Playgroud)

我想获取具有国家 ISO 代码的 String[],例如 zoneId 适用的“AS”、“AL”、“AU”?

pis*_*ist 6

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

这些文件的条目格式如下:

#codes  coordinates TZ  comments
AD      +4230+00131 Europe/Andorra
AE,OM   +2518+05518 Asia/Dubai
AF      +3431+06912 Asia/Kabul
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,zone1970.tab它是较新的,涵盖了多个国家/地区使用时区的情况,但您可以检查两者并查看哪一个可以解决您的问题。

还有iso3166.tab 文件,将国家/地区代码映射到各自的名称。

我不确定Java是否有一个API可以直接读取这些文件,但是看看它们的格式,读取它们并找到你想要的信息似乎很简单。


**快速说明**:无需调用 `Calendar.getInstance().getTimeZone().toZoneId()`。

如果您希望 JVM 的默认时区作为ZoneId对象,只需调用ZoneId.systemDefault(). 如果您希望区域的 ID 为 a String(例如Europe/BerlinAmerica/New_York),只需调用ZoneId.systemDefault().getId()