timezone - 获取某个位置的历史时区信息
问题描述
问题是为过去特定日期的某个位置定义正确的时区/偏移量。
这实际上可以使用 Google Maps Timezone API 服务。
我想知道是否有任何其他可用/准备就绪的解决方案(服务/库)能够达到相同的结果?Esp允许在不连接外部服务的情况下执行此操作?
与第一个问题相关的第二个问题是获取特定位置(或城市)的时区/偏移量的更改日期。特定位置确实更改其时区的日期。在这里,我不是在谈论可以使用 IANA 时区数据库处理的夏令时,而是关于某个位置决定从某个时刻开始使用另一个时区的情况。
听到有人处理过此类问题并可能会提出解决方案的建议很有趣。
解决方案
如问题评论中所述,可以在此答案中找到将纬度和经度解析为 IANA 时区条目的选项(包括离线方法) 。
关于您的第二个问题,给定区域中对时区的所有更改已经通过其Zone
和Rule
条目在 IANA 时区数据库中表示。这包括夏令时调整、标准偏移的更改以及该时区名称的英文缩写的更改(如果适用)。
在您在问题评论中描述的情况下,克里米亚的全部时间由Europe/Simferopol
区域及其相关规则表示。您可以在此处查看详细信息。它包括您提到的 2014 年更改。如果您实际上了解克里米亚某些地区的当地时间与辛菲罗波尔不同,那么您应该将其提交给tz 邮件列表以供讨论和辩论。
在这种情况下,如果得到验证和保证,就会发生“区域分割”。这会导致创建新的 IANA 时区标识符,使用该地区时间与现有地区不同的人口最多的城市。创建新区域时,会从前一个区域复制现有历史记录。仅调整 LMT 条目以反映新位置。然后,新区或旧区都应用了偏差,具体取决于哪一侧有变化。一个示例是在2018h 版本中创建时Asia/Qostanay
与Asia/Qyzylorda
(都在哈萨克斯坦)分离。
很少有 IANA TZDB 不按照您建议的方式涵盖时区更改的情况:
- 偏差仅发生在 1970 年之前的日期。
- 如果区域之间的边界是流动的,例如在战争或起义期间。
- 有关偏差的信息的准确性无法验证或存在重大争议。
- 偏差发生在一个太小而无法跟踪其变化的地区,例如小型定居点或居住在边境农村地区的个人。
tz 代码和数据的理论和语用学(theory.html
TZDB 中的文件)进一步描述了这些事情。有时也会在 tz 邮件列表中讨论和辩论它们。
最后,请记住,IANA TZDB 实际上并没有尝试定义地缘政治边界。这样的事情经常引起争议,并且更多地属于地图制作者而不是时间守卫者。因此,纬度/经度查找仅与其背后的地图一样好。在我之前引用的列表中提供的大多数开源解决方案中,边界基于时区边界生成器项目的数据,该项目又使用开放街道地图(OSM) 来处理其大部分地缘政治边界。但是,Google、Microsoft 和其他公司提供的在线 Web 服务不一定使用相同的地图。因此,根据您使用的数据源,相同的纬度和经度可能会解析为不同的 IANA 时区标识符。
推荐阅读
- android - 如何在 ViewGroup 类中将 UrhoSharp Surface 附加到 LinearLayout
- javascript - 如何在 Electron 中正确使用 preload.js
- java - Windows 10 中的最大文件名长度是多少?Java会尝试/捕获会通过异常吗?
- ssl-certificate - 授权在 Windows server 2012 上安装新证书失败
- flutter - 如何在颤动中将“确定”进度指示器附加到网络调用
- oracle - 要在文本字段中使用的 URL
- c++ - 如何在 constexpr 构造函数中初始化矩阵 ONCE?
- logging - 在 fastai 中记录培训
- python - 耦合 OIDENT 求解器中方程的顺序是否重要?
- python - 使用动态表使用 pandas 解析 SQL 参数标记