嗨,我知道这个问题被问了很多次,但是那些问题都是关于webservice的。我正在开发一个应用程序,显示时区选择国家的用户。例如,我有所有国家的列表,当用户从中选择一个国家时,我想通过国家名称(可能是字符串"加拿大")搜索时区。如果我像这样搜索,是否可以从android设备获得时区?注意:我的应用程序不使用互联网连接。我想在没有网络连接的情况下看这些照片。
除此之外,还有什么相关的方法吗?
如果我理解你的问题,你可以尝试这样做-
String[] tzIds = TimeZone.getAvailableIDs();
List<String> al = new ArrayList<String>();
for (String timeZoneId : tzIds) {
if (timeZoneId.startsWith("Canada")) {
al.add(timeZoneId);
}
}
System.out.println(al);
这里的输出(稍微重新格式化)是
[Canada/Pacific, Canada/Yukon, Canada/Mountain, Canada/Central,
Canada/East-Saskatchewan, Canada/Saskatchewan, Canada/Eastern,
Canada/Atlantic, Canada/Newfoundland]
你可以这样做:
TimeZone tz = TimeZone.getTimeZone (id);
其中id
必须是区域/位置形式的奥尔森名称,例如America/los - angeles。
您可以使用以下命令获取可用的时区:
String[] ids = TimeZone.getAvailableIDs(0);
官方文档:http://developer.android.com/reference/java/util/TimeZone.html
国家到时区映射数据库的答案解决了您的大多数问题。
如果你想避免使用互联网,那么你应该能够嵌入一个数据库到你的Android应用程序。然而,这有一个明显的问题,你的Android应用程序的旧版本可能有(越来越多)过时的时区信息。
最后,您需要注意一些国家有多个时区,因此您不能仅从国家名称确定"时区"。
其他人建议使用TimeZone
API并使用时区id来计算国家名称。不幸的是,这不起作用1。"Olson"数据库上的时区id的形式是"Area/Location",其中区域是"America"、"Africa"等,位置通常是一个城市的名称。官方id不使用国家名称。
维基百科参考:TZ数据库:names of zones.
(显然,zone.tab
数据确实包括国家代码,但我不认为这是暴露在Java/Android TimeZone
API。)
1 -除非国家是澳大利亚:-)