这是交易。我有一个位置的纬度/经度集。我需要弄清楚该位置的当前时间。以下是我之前得到它的方式:
NSDateFormatter *theFormatter = [[NSDateFormatter alloc] init];
[theFormatter setDateFormat:@"h:mm a"];
NSDate *todaysdate = [NSDate date];
NSString *todaysDate = [theFormatter stringFromDate:todaysdate];
[theFormatter release];
然而,我意识到这将为用户的当前位置提供时间。在某个地方是否有一个API,它给我的时间基于纬度/经度对?
提前致谢。
答案 0 :(得分:2)
不幸的是,时区(以及一般时间)从未像您希望的那样简单。
对于简单的近似,您可以遵循jer的建议。经度范围从-180到180度,一天24小时,因此每个时区可获得15度经度。将这些时区置于0度经度中心,因此UTC从-7.5扩展到7.5,UTC + 1从7.5到22.5,UTC-1从-7.5到-22.5,依此类推。然后,您将有一个非常简单,错误的模型,我们如何使用时区。
看看这个map of time zones。
一旦你解决了问题,你就可以开始考虑夏令时了。
答案 1 :(得分:1)
不,你必须写一个。由于纬度和经度点是众所周知的,并且时区也是众所周知的(虽然定期更改),您所要做的就是在给定时区中映射纬度/经度框的位置,并计算当前位置是否在哪一个那些盒子。一旦你知道你所在的盒子,就会有足够的信息来确定你的时间。
答案 2 :(得分:1)
这不是一个微不足道的问题 - 但如果没有解决方案,这不是一个问题。像Geonames和WeatherBug这样的服务非常严格和/或代价高昂,所以在彻底了解他们的服务条款之前,不要开始开发一些东西。
以下是我为基于Appcelerator的iPhone应用程序执行的步骤:
如果您不关心夏令时,那么您就完成了,否则,您就会陷入困境。夏令时的景观完全不合逻辑且经常变化。我能做的最好的就是谷歌“夏令时规则”(开始在这里查看:Sources for Time Zone and Daylight Saving Time Data),并准备做大量的工作设置列表,你可以用它来计算。经过大量调整后,我的仍然无法正常工作。
答案 3 :(得分:0)
使用此数据转储并将其导入您的程序。然后找到您的纬度/经度所在的国家/地区及其时区。然后,您可以计算特定纬度/经度的时间。
答案 4 :(得分:0)
我写了一个小的Java类来完成这项工作,数据嵌入代码中。它可以很容易地翻译成ObjectiveC。数据库嵌入在代码本身中。它准确到22公里。
https://sites.google.com/a/edval.biz/www/mapping-lat-lng-s-to-timezones