Mat*_*int 281 timezone geolocation latitude-longitude
StackOverflow关于从某个位置解析时区的问题太多了.此社区wiki试图合并所有有效的响应.
请更新我的答案,或根据需要添加您自己的答案.
问题
鉴于某个位置的纬度和经度,如何知道该位置的有效时区?
在大多数情况下,我们正在寻找IANA/Olson时区ID,尽管某些服务可能只返回UTC偏移量或其他时区标识符.有关详细信息,请阅读时区标签信息.
Mat*_*int 382
时区位置Web服务
原始时区边界数据
以下项目以前是时区边界数据的来源,但不再积极维护.
时区地理位置离线实施
使用Timezone Boundary Builder数据的实现
使用旧的tz_world数据的实现
调用其中一个Web服务的库
其他想法
如果您知道其他人,请更新此列表
另请注意,最近城市方法可能不会产生"正确"结果,只是近似值.
转换为Windows区域
列出的大多数方法都将返回IANA时区ID.如果需要转换为Windows时区以与TimeZoneInfo.NET中的类一起使用,请使用TimeZoneConverter库.
不要使用zone.tab
该时区信息数据库包括一个名为文件zone.tab.此文件主要用于显示用户可从中挑选的时区列表.它包括每个时区的参考点的纬度和经度坐标.这允许创建突出显示这些点的地图.例如,请参阅moment-timezone主页上显示的交互式地图.
尽管使用此数据从纬度和经度坐标中解析时区可能很诱人,但请考虑这些是点 - 而不是边界.最好的方法是确定最近的点,在许多情况下这不是正确的点.
请考虑以下示例:

两个方块表示不同的时区,其中每个方块中的黑点是参考位置,例如zone.tab中可以找到的内容.蓝点代表我们试图找到时区的位置.显然,这个位置位于左侧的橙色区域内,但是如果我们只看到距参考点的最近距离,它将分解到右侧的绿色区域.
如何为node.js https://github.com/mattbornski/tzwhere提供此解决方案
它的Python对应物:https: //github.com/pegler/pytzwhere
小智 6
我们Teleport刚开始打开我们的API,其中一个用例也暴露了坐标的TZ信息.
例如,可以通过以下方式请求我们所有可用的坐标TZ信息:
curl -s https://api.teleport.org/api/locations/59.4372,24.7453/?embed=location:nearest-cities/location:nearest-city/city:timezone/tz:offsets-now | jq '._embedded."location:nearest-cities"[0]._embedded."location:nearest-city"._embedded."city:timezone"'
Run Code Online (Sandbox Code Playgroud)
这将返回以下内容
{
"_embedded": {
"tz:offsets-now": {
"_links": {
"self": {
"href": "https://api.teleport.org/api/timezones/iana:Europe%2FTallinn/offsets/?date=2015-09-07T11%3A20%3A09Z"
}
},
"base_offset_min": 120,
"dst_offset_min": 60,
"end_time": "2015-10-25T01:00:00Z",
"short_name": "EEST",
"total_offset_min": 180,
"transition_time": "2015-03-29T01:00:00Z"
}
},
"_links": {
"self": {
"href": "https://api.teleport.org/api/timezones/iana:Europe%2FTallinn/"
},
"tz:offsets": {
"href": "https://api.teleport.org/api/timezones/iana:Europe%2FTallinn/offsets/{?date}",
"templated": true
},
"tz:offsets-now": {
"href": "https://api.teleport.org/api/timezones/iana:Europe%2FTallinn/offsets/?date=2015-09-07T11%3A20%3A09Z"
}
},
"iana_name": "Europe/Tallinn"
}
Run Code Online (Sandbox Code Playgroud)
对于示例,我使用./jq进行JSON解析.