从iPhone获取时区/国家

24

有没有办法确定手机所在的时区/国家?我不想使用位置服务。

这样做的目的是自动路由通话。如果用户在美国,我希望应用程序默认调用基于美国的呼叫中心。如果用户在其他国家,则希望它默认调用他们所在的呼叫中心。

谢谢!

3个回答

61

您可以使用以下代码获取本地时区的名称:

NSTimeZone *timeZone = [NSTimeZone localTimeZone];
NSString *tzName = [timeZone name];

时区的名称通常是类似于 Australia/SydneyEurope/Zurich 或者 America/Denver 这样的形式。如果你只关心大洲的话,那么可能仅仅需要这些信息。

如果你需要更多信息:可以在 http://www.iana.org/time-zones 获取官方的时区数据库。下载最新版本的 tzdataYYYYx.tar.gz(此处的 "x" 代表具体的版本号,例如 tzdata2013g.tar.gz)。在该压缩包中有一个名为 zone.tab 的文件,其中列出了每个时区的经纬度信息,例如:

CH      +4723+00832     Europe/Zurich

+4723+00832表示纬度为+47º23",经度为+8º23"。

更新:在某些情况下(我不确定是哪些情况),时区名称可能是旧式名称,例如US/Pacific,它未列在zone.tab中。为了处理这些情况,还需要获取名为backward的文件,该文件提供了旧名称到当前名称的转换。

zone.tab转换为您的应用程序可以使用的内容取决于您。结果将远不及位置服务精确,但会给出一个大致的想法。但不能保证。在以下几种情况下,它将失败:

  1. 用户在设置中更改其时区。大多数用户让手机自动设置时间和区域,但并非所有人都是如此。如果用户更改其时区,则会得到他们想要的而不是准确的信息。

  2. 设备无法确定正确的本地时区。网络问题可能会阻止手机准确设置时间和区域。例如,如果用户乘坐飞机并在降落时遇到网络问题,则手机可能仍然显示他们出发地点的时区。


有没有比使用zone.tab更简单的方法将国家转换为国家代码? - Alan
据我所知,目前还没有,但是zone.tab已经非常容易使用了。 - Tom Harrington

1
    NSTimeZone *timeZoneLocal = [NSTimeZone localTimeZone];
    NSString *strTimeZoneName = [timeZoneLocal name];

    or

    NSTimeZone *timeZoneLocal = [NSTimeZone defaultTimeZone];
    NSString *strTimeZoneName = [timeZoneLocal name];

1

更新:在最后一条评论后,我更改了我的答案。

您可以反向查找电话的IP地址以查找地理位置。有几个rest API可用

不过,我不建议这样做,因为这可能导致苹果拒绝您的应用程序。最好使用由苹果提供的位置服务


这似乎提供了用户设置其设备的语言环境。如果希腊人前往美国,这仍将提供希腊语。 - AlexWien

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