无论如何都要告诉手机所在的时区/国家/地区?我宁愿不使用位置服务。
这样做的目的是自动路由呼叫。如果用户在美国,我希望该应用默认为呼叫美国呼叫中心。如果用户在其他国家/地区,我希望它默认为其呼叫中心。
谢谢!
答案 0 :(得分:60)
您可以使用以下方式获取本地时区的名称:
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
之类的旧式名称,未列在{{1 }}。要处理这些文件,还要获取名为zone.tab
的文件,该文件将旧名称的翻译为当前名称。
将backward
转换为您的应用可以使用的内容取决于您。结果将远不如位置服务那么精确,但会给出一个大致的想法。但不保证。它会在几种情况下失败:
用户在“设置”中更改其时区。大多数用户让他们的手机自动设置时间和区域,但不是每个人。如果用户更改了他们的时区,您将获得他们想要的任何内容,而不是准确的内容。
设备无法确定正确的本地时区。网络问题可能会阻止手机准确设置时间和区域。例如,如果用户乘飞机旅行并在登陆时遇到网络问题,则手机可能仍会显示出发地点的时区。
答案 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];