为给定的Java TimeZone获取国家/地区

时间:2013-05-07 17:25:30

标签: java android timezone

我有一个java TimeZone对象,例如America/Denver。从理论上讲,IANA database列出了该TimeZone的一个国家/地区代码,即US

在java或Android中,如何获取指定TimeZone对象的国家/地区?

更新:请注意,我不是在谈论将GMT+0700映射到特定国家/地区。显然,可能有多个国家/地区映射到单个原始偏移量。我正在谈论将特定时区代码从https://en.wikipedia.org/wiki/Zone.tab映射到其关联的单一国家/地区代码。

3 个答案:

答案 0 :(得分:6)

为了在国家/地区和时区之间进行映射,我使用了ICU library。 使用com.ibm.icu.util.TimeZone.getAvailableIDs(countryCode)方法,我设法将时区映射到国家/地区代码。

public static Map<String, String> mapTimezonesToCountries() {
    Map<String, String> timezoneToCountry = new HashMap<>();

    String[] locales = Locale.getISOCountries();

    for (String countryCode : locales) {
        for (String id : com.ibm.icu.util.TimeZone.getAvailableIDs(countryCode))
        {
            // Add timezone to result map

            timezoneToCountry.put(id, countryCode);
        }

    }
    return timezoneToCountry;

}

答案 1 :(得分:0)

你不能,从TimeZone到Country没有1:1的关系 例如,还有timeZone“UTC”

答案 2 :(得分:0)

您为zone.tab指定的链接实际上是您要查找的数据的来源。当然,你想要使用authoritative,而不是维基百科上的副本。

IANA / Olson数据库使用JodaTime库在Java中实现。但我不相信他们会通过任何类公开zone.tab。至少我找不到它。如果我不正确,请更新我。

您始终可以自行导入文件并根据需要使用它。

<强>更新

我对Android一无所知,但我发现了一些对你有用的东西。似乎有一个函数公开libcore.icu.TimeZoneNames.forLocale(locale)

中的zone.tab数据

我搜索过,但我找不到任何参考文档。