我想知道我是否可以在某个地方获得 android 版本 2.3.3 的时区选择列表的默认代码?
问问题
10227 次
2 回答
11
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);
}
时区的文档。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"));
于 2013-03-21T08:04:15.780 回答
7
不幸的是,Android 设置从设置应用程序中包含的 XML 中获取该时区列表。您可以在源代码中看到这一点(第 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 日历)具有自己的值数组。可以通过对这些资源进行逆向工程来检查它。
因此,除非您想维护自己的列表(考虑到多语言...),否则我建议您减少java.util.TimeZone提供的列表并仅显示您想要的那些时区,如 @ Raghunandan 在他的回答评论中推荐了你。
于 2013-05-03T12:37:56.760 回答