从iPhone获取时区/国家/地区

时间:2013-10-04 16:49:00

标签: iphone ios timezone

无论如何都要告诉手机所在的时区/国家/地区?我宁愿不使用位置服务。

这样做的目的是自动路由呼叫。如果用户在美国,我希望该应用默认为呼叫美国呼叫中心。如果用户在其他国家/地区,我希望它默认为其呼叫中心。

谢谢!

3 个答案:

答案 0 :(得分:60)

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

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

名称将类似于Australia/SydneyEurope/ZurichAmerica/Denver。因为听起来你可能只关心这个大陆,这可能就是你所需要的。

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

CH      +4723+00832     Europe/Zurich

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

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

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

  1. 用户在“设置”中更改其时区。大多数用户让他们的手机自动设置时间和区域,但不是每个人。如果用户更改了他们的时区,您将获得他们想要的任何内容,而不是准确的内容。

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

答案 1 :(得分:1)

更新:我在最后一次评论后改变了我的回答。

您可以反向查找手机的IP以查找地理位置。有several rest APIs available

说我不推荐这个,因为这可能会导致Apple拒绝您的申请。安全的赌注是通过Apple提供的location services

答案 2 :(得分:1)

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

    or

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