从 iPhone 获取时区/国家
Posted
技术标签:
【中文标题】从 iPhone 获取时区/国家【英文标题】:Get Timezone/country from iPhone 【发布时间】:2013-10-11 18:33:24 【问题描述】:有没有办法告诉手机位于哪个时区/国家?我宁愿不使用定位服务。
这样做的目的是自动路由呼叫。如果用户在美国,我希望应用程序默认呼叫美国的呼叫中心。如果用户在另一个国家,我希望它默认到他们的呼叫中心。
谢谢!
【问题讨论】:
【参考方案1】:您可以使用以下方法获取本地时区的名称:
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
转换为您的应用可以使用的东西取决于您。结果远不如定位服务准确,但会给出一个大致的概念。但不能保证。它会在以下几种情况下失败:
用户在“设置”中更改时区。大多数用户让他们的手机自动设置时间和区域,但不是所有人。如果用户改变他们的时区,你会得到他们想要的,而不是准确的。
设备无法确定正确的本地时区。网络问题可能会导致手机无法准确设置时间和时区。例如,如果用户乘飞机旅行,降落时遇到网络问题,手机可能仍会显示其出发地的时区。
【讨论】:
有没有比使用 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 - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法