24

有没有办法告诉手机位于哪个时区/国家?我宁愿不使用定位服务。

这样做的目的是自动路由呼叫。如果用户在美国,我希望该应用程序默认呼叫美国的呼叫中心。如果用户在另一个国家,我希望它默认到他们的呼叫中心。

谢谢!

4

3 回答 3

61

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

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

名称将类似于Australia/Sydney、 或Europe/Zurich、 或America/Denver。因为听起来你可能只关心大陆,所以这可能就是你所需要的。

如果您需要更多信息:在http://www.iana.org/time-zones获取官方时区数据库。下载(或您阅读本文时tzdata2013g.tar.gz的最新版本)。tzdataYYYYx.tar.gz该存档中有一个名为的文件,该文件zone.tab为每个时区提供纬度/经度,例如:

CH      +4723+00832     Europe/Zurich

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

更新:在某些情况下(我不确定是哪个),时区名称可能是旧式名称US/Pacific,例如zone.tab. 要处理这些,还要获取名为 的文件backward,该文件将旧名称翻译为当前名称。

转换zone.tab成您的应用可以使用的东西取决于您。结果远不如定位服务准确,但会给出一个大致的概念。但不能保证。它会在以下几种情况下失败:

  1. 用户在设置中更改他们的时区。大多数用户让他们的手机自动设置时间和区域,但不是所有人。如果用户更改他们的时区,您将得到他们想要的任何东西,而不是准确的东西。

  2. 设备无法确定正确的本地时区。网络问题可能会导致手机无法准确设置时间和时区。例如,如果用户乘飞机旅行并且在降落时遇到网络问题,则手机可能仍会显示其出发地的时区。

于 2013-10-04T20:27:05.657 回答
1
    NSTimeZone *timeZoneLocal = [NSTimeZone localTimeZone];
    NSString *strTimeZoneName = [timeZoneLocal name];

    or

    NSTimeZone *timeZoneLocal = [NSTimeZone defaultTimeZone];
    NSString *strTimeZoneName = [timeZoneLocal name];
于 2014-12-04T11:57:12.847 回答
1

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

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

说我不建议这样做,因为这可能会导致 Apple 拒绝您的申请。安全的选择是通过 Apple 提供的定位服务

于 2013-10-04T16:53:17.690 回答