5

例如,我有一个 java TimeZone 对象America/Denver。理论上,IANA 数据库列出了该时区的一个国家代码,即US.

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

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

4

3 回答 3

7

为了在国家和时区之间进行映射,我使用了 ICU。使用 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;

}
于 2014-11-26T13:00:27.770 回答
0

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

于 2013-05-07T17:29:54.447 回答
0

您提供给 zone.tab 的链接实际上是您要查找的数据的来源。当然,您希望使用权威的,而不是维基百科上的副本。

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

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

更新

我对 Android 一无所知,但我发现了一些对你来说可能有意义的东西。似乎有一个函数在libcore.icu.TimeZoneNames.forLocale(locale)中公开 zone.tab 数据

我进行了搜索,但找不到任何关于此的参考文档。

于 2013-05-07T20:11:46.703 回答