从 iPhone 获取时区/国家

Posted

技术标签:

【中文标题】从 iPhone 获取时区/国家【英文标题】:Get Timezone/country from iPhone 【发布时间】:2013-10-11 18:33:24 【问题描述】:

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

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

谢谢!

【问题讨论】:

【参考方案1】:

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

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 之类的旧式名称,但未在 zone.tab 中列出。要处理这些问题,还需要获取名为 backward 的文件,该文件将旧名称转换为当前名称。

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

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

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

【讨论】:

有没有比使用 zone.tab 更容易转换为国家代码的方法? 我不知道,但是 zone.tab 已经很容易使用了。【参考方案2】:

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

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

表示我不建议这样做,因为这可能会导致 Apple 拒绝您的申请。安全的赌注是通过 Apple 提供的 location services

【讨论】:

这似乎给出了用户将其设备设置为的区域设置。如果一个希腊人去美国旅行,这仍然会提供希腊人【参考方案3】:
    NSTimeZone *timeZoneLocal = [NSTimeZone localTimeZone];
    NSString *strTimeZoneName = [timeZoneLocal name];

    or

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

【讨论】:

以上是关于从 iPhone 获取时区/国家的主要内容,如果未能解决你的问题,请参考以下文章

iphone 上的时区变成GMT时区 怎么改?!

iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法

iPhone CoreData:使用变音符号排序

如何在 iPhone App 中获取一个国家的所有城市

如何从 iphone sdk 中的 ISOCountryCode 获取 ISOCurrencyCode?

iPhone CurrentTimeZoneOffset 从 UTC