2013-03-21 5 views

ответ

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); 
    } 

Документация TimeZone. http://developer.android.com/reference/java/util/TimeZone.html

Для установки часового пояса

Ниже приведен пример кода для настройки часового пояса в соответствии с Америкой

// 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

Хорошо, я понял. Но я хотел бы иметь меньше записей в часовом поясе. Что-то вроде этого - http://publib.boulder.ibm.com/tividd/td/TWS/SC32-1274-02/en_US/HTML/SRF_mst273.htm – user2086174

+1

Имейте список всех названий часовых поясов и сравните с названиями часовых поясов, которые вы получаете от петля. Отфильтруйте и отобразите данные. – Raghunandan

+0

Можете ли вы показать, как это сделать с помощью кода? – Jayesh

6

К сожалению, Android настройки занимает этот список временных зон из XML включен в настройках приложения. Вы можете увидеть это в source code (строка 161):

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

Другие приложения, такие как Google Calendar, имеют свои собственные массивы значений. Это можно проверить, выполнив reverse engineering этих ресурсов.

Итак, если вы не хотите поддерживать свой собственный список (принимая во внимание многоязычность ...), я бы рекомендовал вам иметь приведенный список из java.util.TimeZone и показывать только те часовые пояса, которые вы хотите, так как @ Рагхунандан рекомендовал вам в комментарии к ответу.

+1

Как мы можем разрешить R.xml.timezones ? – Jayesh

+0

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

+0

Как отметил @ barn.gumbl, R.xml.timezones указывает на файл XML со всеми временными зонами, расположенными в Рез/XML/timezones.xml –

Смежные вопросы