2013-03-21 42 views

Trả lời

8
String[] ids=TimeZone.getAvailableIDs(); 
    for(int i=0;i<ids.length;i++) 
    { 
     System.out.println("Availalbe ids.................."+ids[i]); 
     TimeZone d= TimeZone.getTimeZone(ids[i]); 
     System.out.println("time zone."+d.getDisplayName()); 
     System.out.println("savings."+d.getDSTSavings()); 
     System.out.println("offset."+d.getRawOffset()); 

     ///////////////////////////////////////////////////// 
     if (!ids[i].matches(".*/.*")) { 
      continue; 
     } 

     String region = ids[i].replaceAll(".*/", "").replaceAll("_", " "); 
     int hours = Math.abs(d.getRawOffset())/3600000; 
     int minutes = Math.abs(d.getRawOffset()/60000) % 60; 
     String sign = d.getRawOffset() >= 0 ? "+" : "-"; 

     String timeZonePretty = String.format("(UTC %s %02d:%02d) %s", sign, hours, minutes, region); 
     System.out.println(timeZonePretty); 
     ////////////////////////////////////////////////////////////////// 
    } 
    ListView listitems=(ListView)findViewById(R.id.list); 
    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,ids); 
    listitems.setAdapter(adapter); 
    } 

Các tài liệu cho TimeZone. http://developer.android.com/reference/java/util/TimeZone.html

Để thiết lập múi giờ

Sau đây là mẫu mã cho thiết lập Time Zone của Mỹ theo

// First Create Object of Calendar Class 
    Calendar calendar = Calendar.getInstance();   
    // Now Set the Date using DateFormat Class 
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss z"); 
    // Finally Set the time zone using SimpleDateFormat Class's setTimeZone() Method 
    sdf.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles")); 
+0

Ok, tôi đã hiểu. Nhưng tôi muốn có ít mục nhập múi giờ hơn. Một cái gì đó như thế này - http://publib.boulder.ibm.com/tividd/td/TWS/SC32-1274-02/en_US/HTML/SRF_mst273.htm – user2086174

+1

Có danh sách tất cả các tên múi giờ và so sánh với các tên múi giờ bạn nhận được từ vòng lặp. Lọc và hiển thị dữ liệu. – Raghunandan

+0

bạn có thể chỉ cách thực hiện điều đó bằng mã không? – Jayesh

6

Thật không may, cài đặt Android mất rằng danh sách múi giờ từ một XML bao gồm trong ứng dụng Settings. Bạn có thể thấy điều này trong source code (dòng 161):

private List<HashMap> getZones() { 
    List<HashMap> myData = new ArrayList<HashMap>(); 
    long date = Calendar.getInstance().getTimeInMillis(); 
    try { 
     XmlResourceParser xrp = getResources().getXml(R.xml.timezones); 
    ... 
} 

Các ứng dụng khác, chẳng hạn như Google Calendar, có mảng riêng của họ về giá trị. Nó có thể được kiểm tra bằng cách thực hiện reverse engineering các tài nguyên đó. Vì vậy, trừ khi bạn muốn duy trì danh sách của riêng bạn (xem xét đa ngôn ngữ ...), tôi khuyên bạn nên có danh sách giảm giá được cung cấp bởi java.util.TimeZone và chỉ hiển thị những múi giờ bạn muốn, như @ Raghunandan đã đề nghị bạn trong bình luận của câu trả lời.

+1

Làm cách nào chúng ta có thể giải quyết R.xml.timezones ? – Jayesh

+0

https://github.com/android/platform_packages_apps_settings/blob/master/res/xml/timezones.xml – pvllnspk

+0

Như @ barn.gumbl đã chỉ ra, R.xml.timezones trỏ đến tệp XML có tất cả múi giờ nằm ​​trong res/xml/timezones.xml –

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