2024-05-23 15:48:43 发布
网友
StackOverflow上有太多关于从一个位置解析时区的问题。此社区wiki试图整合所有有效的响应。
请更新我的答案,或添加您自己认为合适的。
问题 给定一个地点的经纬度,如何知道该地点的时区是有效的?
在大多数情况下,我们都在寻找一个IANA/Olson时区id,尽管有些服务可能只返回一个UTC偏移量或其他时区标识符。请阅读timezone tag info了解详细信息。
时区定位Web服务
原始时区边界数据
以下项目以前是时区边界数据的来源,但现在不再积极维护。
时区地理位置离线实施
使用时区边界生成器数据的实现
使用旧的tz_world数据的实现
调用其中一个web服务的库
其他想法
如果您知道其他人,请更新此列表
另外,请注意,最近的城市方法可能不会产生“正确”的结果,只是一个近似值。
转换到Windows区域
列出的大多数方法都将返回一个IANA时区id。如果需要转换为Windows时区以便与.NET中的TimeZoneInfo类一起使用,请使用TimeZoneConverter库。
TimeZoneInfo
不要使用zone.tab
tz database包含一个名为^{}的文件。此文件主要用于显示供用户选择的时区列表。它包括每个时区参考点的经纬度坐标。这允许创建突出显示这些点的地图。例如,请参见the moment-timezone home page上显示的交互式映射。
虽然使用这些数据从经纬度坐标解析时区可能很有诱惑力,但请考虑这些是点,而不是边界。最好的办法是确定最近的点,在许多情况下,这不是正确的点。
请考虑以下示例:
这两个方块代表不同的时区,其中每个方块中的黑点是参考位置,例如可以在zone.tab中找到的内容。蓝点代表我们试图找到时区的位置。很明显,这个位置在左边的橙色区域内,但是如果我们只看离参考点最近的距离,它将解析为右边的绿色区域。
我们在Teleport刚刚开始opening up our API's,其中一个用例还公开了坐标的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"'
这将返回以下内容
{ "_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" }
例如,我使用./jq进行JSON解析。
这个node.js的解决方案怎么样 https://github.com/mattbornski/tzwhere
与之对应的Python: https://github.com/pegler/pytzwhere
时区定位Web服务
原始时区边界数据
以下项目以前是时区边界数据的来源,但现在不再积极维护。
时区地理位置离线实施
使用时区边界生成器数据的实现
使用旧的tz_world数据的实现
调用其中一个web服务的库
其他想法
如果您知道其他人,请更新此列表
另外,请注意,最近的城市方法可能不会产生“正确”的结果,只是一个近似值。
转换到Windows区域
列出的大多数方法都将返回一个IANA时区id。如果需要转换为Windows时区以便与.NET中的
TimeZoneInfo
类一起使用,请使用TimeZoneConverter库。不要使用zone.tab
tz database包含一个名为^{} 的文件。此文件主要用于显示供用户选择的时区列表。它包括每个时区参考点的经纬度坐标。这允许创建突出显示这些点的地图。例如,请参见the moment-timezone home page上显示的交互式映射。
虽然使用这些数据从经纬度坐标解析时区可能很有诱惑力,但请考虑这些是点,而不是边界。最好的办法是确定最近的点,在许多情况下,这不是正确的点。
请考虑以下示例:
这两个方块代表不同的时区,其中每个方块中的黑点是参考位置,例如可以在zone.tab中找到的内容。蓝点代表我们试图找到时区的位置。很明显,这个位置在左边的橙色区域内,但是如果我们只看离参考点最近的距离,它将解析为右边的绿色区域。
我们在Teleport刚刚开始opening up our API's,其中一个用例还公开了坐标的TZ信息。
例如,可以通过以下方式请求所有可用的TZ坐标信息:
这将返回以下内容
例如,我使用./jq进行JSON解析。
这个node.js的解决方案怎么样 https://github.com/mattbornski/tzwhere
与之对应的Python: https://github.com/pegler/pytzwhere
相关问题 更多 >
编程相关推荐