2013-10-04 61 views
22

无论如何要告诉手机位于哪个时区/国家?我宁愿不使用位置服务。从iPhone获取时区/国家

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

谢谢!

回答

57

你可以得到名称使用本地时区:

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 

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

更新:在某些情况下(我不知道)里,时区名称可能是一个老式的名称,如US/Pacific未在zone.tab上市。为了处理这些问题,还需要获得名为backward的文件,该文件将旧名称翻译为当前名称。

zone.tab转换为您的应用可以使用的内容取决于您。结果将远不及位置服务那样准确,但会给出一个总体思路。但不保证。它会在几种情况下失败:

  1. 用户在设置中更改他们的时区。大多数用户会让手机自动设置时间和区域,但不是每个人。如果用户改变他们的时区,你会得到他们想要的,而不是准确的。

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

+0

有没有比使用zone.tab更简单的方法转换为国家代码? – Alan

+0

不是我所知道的,但是zone.tab已经很容易使用了。 –

1

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

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

说我不推荐这样做,因为这可能会导致Apple拒绝您的应用程序。安全的赌注是去通苹果提供location services

+0

这似乎给了用户自己的设备设置的语言环境。如果一个希腊人去美国,这仍然会传递希腊 – AlexWien

+0

同意@AlexWien –

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

    or 

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