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

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

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

谢谢!

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

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

这个名字将类似Australia/SydneyEurope/Zurich ,或America/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 ,未在zone.tab列出。 要处理这些,还要获取名为backward的文件,它将旧名称的翻译转换为当前名称。

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

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

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

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

您可以反向查找手机的IP以查找地理位置。 有几个其他API可用 。

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

  NSTimeZone *timeZoneLocal = [NSTimeZone localTimeZone]; NSString *strTimeZoneName = [timeZoneLocal name]; or NSTimeZone *timeZoneLocal = [NSTimeZone defaultTimeZone]; NSString *strTimeZoneName = [timeZoneLocal name]; 
Interesting Posts