5

たとえば、Java TimeZone オブジェクトがありますAmerica/Denver。理論的には、IANA データベースには、その TimeZone の 1 つの国コード、つまり がリストされています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

zone.tab に指定したリンクは、実際に探しているデータのソースです。もちろん、ウィキペディアのコピーではなく、信頼できるものを使用することをお勧めします。

IANA/Olson データベースは、JodaTimeライブラリを使用して Java で実装されています。しかし、クラスを介して zone.tab を公開しているとは思いません。少なくとも私は見つけられませんでした。これで間違っている場合は更新してください。

ファイルはいつでも自分でインポートして、必要に応じて使用できます。

アップデート

私は Android について何も知りませんが、あなたにとって意味のあるものを見つけました。libcore.icu.TimeZoneNames.forLocale(locale)に zone.tab データを公開する関数があるようです

検索しましたが、これに関する参考文献は見つかりませんでした。

于 2013-05-07T20:11:46.703 に答える