2013-05-07 14 views
5

Mam obiekt TimeZone java, na przykład America/Denver. W teorii numer IANA database zawiera jeden kod kraju dla strefy czasowej, a mianowicie US.Pobierz kraj dla danego java TimeZone

W java lub Android, w jaki sposób mogę uzyskać kraj dla określonego obiektu TimeZone?

AKTUALIZACJA: Nie mówię o mapowaniu GMT+0700 do określonego kraju. Oczywiście może istnieć wiele krajów, które mapują do pojedynczego surowego offsetu. Mówię o mapowaniu określonego kodu strefy czasowej z https://en.wikipedia.org/wiki/Zone.tab na powiązany z nim pojedynczy kod kraju.

+0

Patrz: 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 - Poprosił o TZID do kraju. Nie do TZID. To powinno być możliwe dla wszystkiego poza strefami administracyjnymi. Innym kierunkiem jest to, o czym mówisz, co oczywiście nie zadziałałoby. –

Odpowiedz

0

Nie można, nie ma relacji 1: 1 od strefy czasowej do kraju.
E.g jest również strefa czasowa "UTC"

+0

Nie widzisz problemu, który zwróci wartość null dla UTC lub podobnego. Dla bezwzględnej większości stref czasowych dobrze byłoby mieć kod kraju. – ruruskyi

0

Link, który podałeś do zone.tab, jest w rzeczywistości źródłem danych, których szukasz. Oczywiście, chcesz użyć takiego, który jest authoritative, a nie kopii na Wikipedii.

Baza danych IANA/Olson jest zaimplementowana w Javie z biblioteką JodaTime. Ale nie wierzę, że eksponują zone.tab przez dowolne klasy. Przynajmniej nie mogłem go znaleźć. Proszę zaktualizuj mnie, jeśli jestem w tym błędna.

Możesz zawsze zaimportować plik samodzielnie i użyć go w razie potrzeby.

UPDATE

ja nic o Androida wiedzą, ale znalazłem coś, co może mieć sens dla Ciebie. Wydaje się, że jest funkcja, która eksponuje dane zone.tab w wyszukiwarce, ale nie znalazłem żadnej dokumentacji referencyjnej na ten temat.

+0

tak, to mój problem. Można by sądzić, że ujawnienie byłoby trywialne, ale nie widzę nigdzie, gdzie jest ono odsłonięte w aplecie java/android (nie patrzyłem na jodobime) – emmby

+0

@emmby - Zobacz linię # 149 łącza w mojej aktualizacji. To pomaga? –

6

Aby mapować kraje i strefy czasowe, skorzystałem z ICU library. Za pomocą metody com.ibm.icu.util.TimeZone.getAvailableIDs (countryCode) udało mi się mapować strefy czasowe do kodów krajów.

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

przybity to bro! :RE –