Time 从经纬度到GMT的时间偏移的粗略估计
有没有办法估计从纬度/经度到格林尼治标准时间(或时区)的偏移量?我见过geonames,但这需要长期工作,我们不想真正依赖web服务。当向不同的用户提供信息时,它只是用来决定是显示“今天”还是“今晚”,这样就不需要太准确(休息一两个小时也不错)Time 从经纬度到GMT的时间偏移的粗略估计,time,latitude-longitude,offset,Time,Latitude Longitude,Offset,有没有办法估计从纬度/经度到格林尼治标准时间(或时区)的偏移量?我见过geonames,但这需要长期工作,我们不想真正依赖web服务。当向不同的用户提供信息时,它只是用来决定是显示“今天”还是“今晚”,这样就不需要太准确(休息一两个小时也不错) 其中,方向为东1,方向为西1,经度为(-180180)仅基于经度的时区在国际水域之外是非常不准确的。请参见本页上的地图: 深海中的垂直彩色条纹是仅从经度推导出的所谓自然时区,而陆地的颜色则是根据适用法律确定的实际时区。你可以看到他们根本排得不好 实际上
其中,方向为东1,方向为西1,经度为(-180180)仅基于经度的时区在国际水域之外是非常不准确的。请参见本页上的地图: 深海中的垂直彩色条纹是仅从经度推导出的所谓自然时区,而陆地的颜色则是根据适用法律确定的实际时区。你可以看到他们根本排得不好 实际上,我在从事另一个项目时遇到了这个问题,并对其进行了大量的研究和开发。首先,我的研究:
- 首先,时区通常不只是由GMT(又称UTC)的偏移量来编码。这没有考虑到夏令时,以及多年来时区的变化。相反,时区ID用于指定一个地理区域,在该区域内,在给定的时间段内(例如,自1970年以来),整个区域的官方时钟时间都是相同的。此类ID中最重要的系统是“Olson时区ID”(这些ID及其偏移规则一起被称为“tz数据库”),Linux和其他Unix操作系统使用它。大多数编程语言和操作系统都具有对Olson时区ID的本机或第三方支持
- GeoNames.org有一个庞大的点位置数据库(城市中心、机场、公共建筑等),每个点位置都有一系列有用的元数据注释,包括奥尔森时区ID。它们有一个很好的API,让您可以通过web访问这些点位置。问题在于,除非您要查询的点正好位于其数据库中记录的顶部,否则您可能会得到位于时区边界另一侧的结果,或者如果您的查询距离最近的点很远,则可能根本得不到响应。web服务的速度也慢得令人痛苦,它们将您一天可以进行的查询数量限制在相对较小的数量
- 地球工具(http://www.earthtools.org/webservices.htm)还有一项服务,它比GeoNames快得多,但它只返回GMT的偏移量,而不是时区ID,而且它不能正确处理世界上大多数地区的夏令时。而且,它似乎没有被维护,所以我不确定数据是否准确(时区随时间变化)
我希望这是有用的。这对我正在进行的项目来说无疑是有用的。如果你知道用户的经度,你就完全知道他们时间的各个方面(忽略一些小错误,如狭义相对论等)。平均太阳时间只是GMT和经度的差(将度部分转换为分钟,1度=60分钟)。您可以根据东或西进行加减。平均太阳时间基本上比时区更准确。白天时间和夜间时间是可变的,取决于纬度,因此您可以使用一些日出和日落时间的近似值,包括纬度、日期和年份。仅此一项就可以提供相当准确的白天和夜晚的概念。这很酷,没想到会这么简单,但到目前为止,它似乎相当准确。谢谢。@ravun,这是正确的,因为a)地球有360度的经度,b)在24小时内旋转360度。(:考虑到时区边界通常位于国家边界,这是相当正确的。否则,我每天上班时都要调表,回家时也要调表:-)此外,夏令时取决于当地立法。但对于今天/今晚的问题,它应该足够了。关注问题的主要领域是太平洋,那里的时区边界存在一些相当极端的扭曲。圣
offset = direction * longitude * 24 / 360