您好,我知道这个问题已经被问了很多次,但那些问题都涉及到Web服务。我正在开发一个应用程序,通过用户选择国家来显示时区。
例如,我有所有国家的列表,当用户从中选择一个国家时,我想通过国家名称(可能是字符串“Canada”)搜索时区。如果我像这样搜索,是否可以从Android设备获取时区?注意:我的应用程序不使用互联网连接。我希望在没有互联网连接的情况下实现这些功能。
除此之外还有其他相关的方法吗?
您好,我知道这个问题已经被问了很多次,但那些问题都涉及到Web服务。我正在开发一个应用程序,通过用户选择国家来显示时区。
例如,我有所有国家的列表,当用户从中选择一个国家时,我想通过国家名称(可能是字符串“Canada”)搜索时区。如果我像这样搜索,是否可以从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
必须是形式为 Area/Location 的 Olson 名称,例如 America/Los_Angeles。
您可以使用以下方式获取可用的时区:
String[] ids = TimeZone.getAvailableIDs(0);
国家时区映射数据库的答案可以解决你大部分的问题。
如果你想避免使用互联网,那么你应该能够将其中一个数据库嵌入到你的Android应用程序中。然而,这显然存在一个问题,即旧版本的Android应用程序可能具有(越来越)过时的时区信息。
最后,你需要知道一些国家有多个时区,因此你不能仅从国家名称确定“时区”。
其他人建议使用TimeZone
API,并使用时区 ID 来确定国家名称。不幸的是,这行不通1。 "Olson" 数据库中的时区 ID 是"Area/Location"的形式,其中区域是"America","Africa"等,而位置通常是城市名。官方 ID 不使用国家名称。
维基百科参考:TZ database : names of zones。
(显然,zone.tab
数据包括国家代码,但我认为在 Java / Android TimeZone
API 中未公开。)
1 - 除非该国家是澳大利亚 :-)