按纬度/经度计算出时间?

时间:2011-01-08 02:59:53

标签: iphone objective-c cocoa-touch time

这是交易。我有一个位置的纬度/经度集。我需要弄清楚该位置的当前时间。以下是我之前得到它的方式:

NSDateFormatter *theFormatter = [[NSDateFormatter alloc] init];
[theFormatter setDateFormat:@"h:mm a"];
NSDate *todaysdate = [NSDate date];
NSString *todaysDate = [theFormatter stringFromDate:todaysdate];
[theFormatter release];

然而,我意识到这将为用户的当前位置提供时间。在某个地方是否有一个API,它给我的时间基于纬度/经度对?

提前致谢。

5 个答案:

答案 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

  • 时区没有良好的秩序; UTC-1中的区域与UTC-3中的区域相邻。
  • UTC-9.5,UTC-4.5,UTC + 3.5,UTC + 5.75和UTC + 13都是有效的时区并且正在使用中。

一旦你解决了问题,你就可以开始考虑夏令时了。

答案 1 :(得分:1)

不,你必须写一个。由于纬度和经度点是众所周知的,并且时区也是众所周知的(虽然定期更改),您所要做的就是在给定时区中映射纬度/经度框的位置,并计算当前位置是否在哪一个那些盒子。一旦你知道你所在的盒子,就会有足够的信息来确定你的时间。

答案 2 :(得分:1)

这不是一个微不足道的问题 - 但如果没有解决方案,这不是一个问题。像Geonames和WeatherBug这样的服务非常严格和/或代价高昂,所以在彻底了解他们的服务条款之前,不要开始开发一些东西。

以下是我为基于Appcelerator的iPhone应用程序执行的步骤:

  1. 找到将所有时区描述为多边形的坐标列表,并将其读入SQLite表。
  2. 根据经度,最佳猜测用户所处的时区(或正在寻找)。这将是几个区域。
  3. 从数据库中拉出每个最佳猜测时区的多边形,并通过多边形中的查找点算法运行每个多边形。返回true的是正确的时区。
  4. 如果您不关心夏令时,那么您就完成了,否则,您就会陷入困境。夏令时的景观完全不合逻辑且经常变化。我能做的最好的就是谷歌“夏令时规则”(开始在这里查看:Sources for Time Zone and Daylight Saving Time Data),并准备做大量的工作设置列表,你可以用它来计算。经过大量调整后,我的仍然无法正常工作。

答案 3 :(得分:0)

使用此数据转储并将其导入您的程序。然后找到您的纬度/经度所在的国家/地区及其时区。然后,您可以计算特定纬度/经度的时间。

Geonames

答案 4 :(得分:0)

我写了一个小的Java类来完成这项工作,数据嵌入代码中。它可以很容易地翻译成ObjectiveC。数据库嵌入在代码本身中。它准确到22公里。

https://sites.google.com/a/edval.biz/www/mapping-lat-lng-s-to-timezones