iPhone的日期和时间从哪里获取时区列表?

4

我可以使用[NSTimeZone knownTimeZoneNames]获取时区列表,但这只提供了包含每个时区一两个城市的时区ID。

日期和时间设置中有一个很好的城市列表,我看到了一些其他应用程序也有相同或类似的查找列表。

这些列表来自哪里?

我确实需要像日期和时间一样将选定的城市与其时区相关联。

3个回答

7

只有2个?在3.1版本中,[NSTimeZone knownTimeZoneNames]返回一个包含401个元素的数组,而地球上的时区要少得多。

我相信“其他应用程序”也使用+knownTimeZoneNames,因为这是唯一返回此类列表的公共方法。但请确保您的代码是正确的。


Settings.app使用来自私有的AppSupport.framework的CPCity API。它确实有旧金山,但它是私有的。

您需要创建自己的数据库(数据可以从/System/Library/PrivateFrameworks/AppSupport.framework/all_cities_adj.plist复制)。


Kenny,谢谢,那个plist正是我要找的。你知道这个列表吗?它是一个包含数组的列表...项目0 = 纬度 项目1 = 经度 项目2 = ??时区?? 项目3 = ??时区ID??? 项目4 = 国家缩写 项目5 = 城市 项目6 = 国家你知道项目2是什么吗?在檀香山显示为1,但应该是-10。对于所有美国城市,它使用US/Eastern、US/Pacific等。据我所知,这些不是有效的时区ID。US/Pacific应该是America/Los Angeles。没问题,我可以用纬度/经度来获取时区。再次感谢, 约翰 - user278859
@johnbdh:用文本编辑器打开文件。'TimeZoneIndex 0-27用于显示时区“带”。'可能不是很有用。似乎必须将第4个字段“TimeZone file”与从NSTimeZone获取的时区名称匹配。此外,此列表仅包含211个条目,而我从公共API中获得了大约400个条目。但是此列表包含许多其他列表中没有的城市...必须进一步研究。可能会合并这些列表。但是感谢您提出这个问题,我也注意到设置应用程序中有更多城市,而我无法从API中获取。 - Felixyz
1
这个练习让我学到了一些东西...
  1. all_cities_adj.plist 里有193个城市
  2. knownTimeZoneNames 返回405个时区
  3. 如果你把这两个列表合并去重,你会得到465个
  4. 在“日期和时间”设置中的时区列表还包括一些不在上述两个列表中的城市,比如 San Jose 和 Pittsburgh。
  5. knownTimeZoneNames 列表与 timeZoneWithName 使用的列表不同。你可以传递 timeZoneWithName US/Eastern 并得到正确的时区,但 US/Eastern 在 knownTimeZoneNames 返回的列表中不存在。
这是一个有趣的练习,感谢所有帮助过我的人。 John
- user278859
1
请查看/System/Library/PrivateFrameworks/GeoKit.framework/Versions/A/Resources/world.geokit - rid
@rid /System/Library/PrivateFrameworks/GeoKit.framework/Versions/A/Resources/world.g‌​eokit 是一个大小为47.7MB的文件,我该怎么处理它? - Marku
显示剩余2条评论

2
您所要求的通常被称为Olson数据库。例如,请参见此维基百科页面。http://en.wikipedia.org/wiki/Tz_database。公共领域Zone.tab文件包含所有时区。您可以在libical发行版的zoneinfo目录中找到zones.tab文件。请注意,保留了HTML标记而不添加解释。

1

我知道这可能是一个晚回答,但以防万一像我前几天那样偶然遇到了它。我刚刚开源了一个库,可以完全实现这个功能。它作为CocoaPod可用,你可以在这里找到它:

https://github.com/gligorkot/TimeZonePicker

另外,感谢上面所有的回复,它们帮助我找到了用于“设置”应用程序的正确城市数据库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接