2013-05-07 57 views
5

Tôi có đối tượng TimeZone java, ví dụ America/Denver. Theo lý thuyết, IANA database liệt kê một mã quốc gia cho TimeZone đó, cụ thể là US.Lấy quốc gia cho một java nhất định TimeZone

Trong java hoặc Android, làm thế nào tôi có thể nhận được quốc gia cho một đối tượng TimeZone được chỉ định?

CẬP NHẬT: Lưu ý rằng tôi không nói về ánh xạ GMT+0700 cho một quốc gia cụ thể. Rõ ràng, có thể có nhiều quốc gia ánh xạ tới một độ lệch thô duy nhất. Tôi đang nói về việc lập bản đồ một mã múi giờ cụ thể từ https://en.wikipedia.org/wiki/Zone.tab đến mã quốc gia số ít liên quan của nó.

+0

Tham khảo điều này: 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 - Anh ấy yêu cầu TZID đến quốc gia. Không phải quốc gia cho TZID. Điều này sẽ có thể cho bất cứ điều gì ngoại trừ khu hành chính. Các hướng khác là những gì bạn đang nói về, mà tất nhiên sẽ không làm việc. –

Trả lời

0

Bạn không thể, không có mối quan hệ 1: 1 từ TimeZone đến Quốc gia.
Ví dụ: cũng có timeZone "UTC"

+0

Không thấy vấn đề trả về null cho UTC hoặc tương tự. Đối với đa số tuyệt đối của mã quốc gia múi giờ sẽ được gọn gàng để có. – ruruskyi

0

Liên kết bạn đã cung cấp cho zone.tab thực sự là nguồn dữ liệu bạn đang tìm kiếm. Tất nhiên, bạn muốn sử dụng một cái là authoritative, chứ không phải là bản sao trên Wikipedia.

Cơ sở dữ liệu IANA/Olson được triển khai bằng Java với thư viện JodaTime. Nhưng tôi không tin họ phơi bày zone.tab qua bất kỳ lớp nào. Ít nhất tôi không thể tìm thấy nó. Vui lòng cập nhật cho tôi nếu tôi không chính xác trong trường hợp này.

Bạn luôn có thể tự nhập tệp và sử dụng tệp khi cần.

CẬP NHẬT

Tôi không biết gì về Android, nhưng tôi tìm thấy một cái gì đó mà có thể có ý nghĩa đối với bạn. Dường như có chức năng hiển thị dữ liệu zone.tab trong libcore.icu.TimeZoneNames.forLocale(locale)

Tôi đã tìm kiếm, nhưng tôi không thể tìm thấy bất kỳ tài liệu tham chiếu nào về điều này.

+0

vâng, đó là vấn đề của tôi. Bạn sẽ nghĩ rằng nó sẽ là tầm thường để lộ, nhưng tôi không thấy bất cứ nơi nào nó được tiếp xúc trong java/android apis (tôi đã không nhìn vào jodatime) – emmby

+0

@emmby - Xem dòng # 149 của liên kết trong bản cập nhật của tôi. cái đó có giúp ích không? –

6

Để ánh xạ giữa các quốc gia và múi giờ, tôi đã sử dụng ICU library. Sử dụng phương thức com.ibm.icu.util.TimeZone.getAvailableIDs (countryCode) Tôi đã quản lý ánh xạ múi giờ thành mã quốc gia.

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

đóng đinh nó bro! : D –

Các vấn đề liên quan