2013-05-07 19 views
5

私はjava TimeZoneオブジェクトを持っています。例えば、America/Denverです。理論上、IANA databaseには、そのTimeZoneの国コードが1つ、すなわちUSと記載されています。与えられたjava TimeZoneの国を取得する

javaまたはAndroidでは、指定したTimeZoneオブジェクトの国を取得するにはどうすればよいですか?

更新:GMT+0700を特定の国にマッピングすることではありません。明らかに、単一の生のオフセットにマップする複数の国があるかもしれません。私は特定のタイムゾーンコードをhttps://en.wikipedia.org/wiki/Zone.tabからその関連する特異な国コードにマッピングすることについて話しています。

+0

これを参照してくださいます。http://stackoverflow.com/questions/1389837/is-there-a-way-to-get-a-timezone-with-only-a-country-code-valid- iso-3166-code – NINCOMPOOP

+0

@NoobUnChained - 彼は国にTZIDを求めています。 TZIDには国ではありません。これは、管理ゾーン以外のものであれば可能です。もう一つの方向はあなたが話していることですが、もちろんそれはうまくいかないでしょう。 –

答えて

0

TimeZoneからCountryには1:1の関係はありません。
例:timeZone "UTC"

+0

UTCなどでnullを返す問題はありません。タイムゾーンの絶対数の大部分については、国番号はきちんとしているはずです。 – ruruskyi

0

zone.tabに与えたリンクは、実際に探しているデータのソースです。もちろん、Wikipediaのコピーではなく、authoritativeのものを使用したいと思うでしょう。

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

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

UPDATE私はアンドロイドについて何も知らないが、私はあなたに意味をなさないかもしれない何かを発見しました。 zone.tabデータを公開する関数があるようです。libcore.icu.TimeZoneNames.forLocale(locale)

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

+0

ええ、それは私の問題です。あなたは公開するのは簡単ではないと思うだろうが、java/android apisで公開されている場所はどこにも表示されない(私はjodatimeを見ていない) – emmby

+0

@emmby - 私の更新のリンク#149行を見てください。それは役に立ちますか? –

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; 

} 
+0

それは仲間を釘付け! :D –

関連する問題