首页 > 解决方案 > 获取某个位置的历史时区信息

问题描述

问题是为过去特定日期的某个位置定义正确的时区/偏移量。

这实际上可以使用 Google Maps Timezone API 服务。

  1. 我想知道是否有任何其他可用/准备就绪的解决方案(服务/库)能够达到相同的结果?Esp允许在不连接外部服务的情况下执行此操作?

  2. 与第一个问题相关的第二个问题是获取特定位置(或城市)的时区/偏移量的更改日期。特定位置确实更改其时区的日期。在这里,我不是在谈论可以使用 IANA 时区数据库处理的夏令时,而是关于某个位置决定从某个时刻开始使用另一个时区的情况。

听到有人处理过此类问题并可能会提出解决方案的建议很有趣。

标签: timezone

解决方案


如问题评论中所述,可以在此答案中找到将纬度和经度解析为 IANA 时区条目的选项(包括离线方法) 。

关于您的第二个问题,给定区域中对时区的所有更改已经通过其ZoneRule条目在 IANA 时区数据库中表示。这包括夏令时调整、标准偏移的更改以及该时区名称的英文缩写的更改(如果适用)。

在您在问题评论中描述的情况下,克里米亚的全部时间由Europe/Simferopol区域及其相关规则表示。您可以在此处查看详细信息。它包括您提到的 2014 年更改。如果您实际上了解克里米亚某些地区的当地时间与辛菲罗波尔不同,那么您应该将其提交给tz 邮件列表以供讨论和辩论。

在这种情况下,如果得到验证和保证,就会发生“区域分割”。这会导致创建新的 IANA 时区标识符,使用该地区时间与现有地区不同的人口最多的城市。创建新区域时,会从前一个区域复制现有历史记录。仅调整 LMT 条目以反映新位置。然后,新区或旧区都应用了偏差,具体取决于哪一侧有变化。一个示例是在2018h 版本中创建时Asia/QostanayAsia/Qyzylorda(都在哈萨克斯坦)分离。

很少有 IANA TZDB 不按照您建议的方式涵盖时区更改的情况:

  • 偏差仅发生在 1970 年之前的日期。
  • 如果区域之间的边界是流动的,例如在战争或起义期间。
  • 有关偏差的信息的准确性无法验证或存在重大争议。
  • 偏差发生在一个太小而无法跟踪其变化的地区,例如小型定居点或居住在边境农村地区的个人。

tz 代码和数据的理论和语用学theory.htmlTZDB 中的文件)进一步描述了这些事情。有时也会在 tz 邮件列表中讨论和辩论它们。

最后,请记住,IANA TZDB 实际上并没有尝试定义地缘政治边界。这样的事情经常引起争议,并且更多地属于地图制作者而不是时间守卫者。因此,纬度/经度查找仅与其背后的地图一样好。在我之前引用的列表中提供的大多数开源解决方案中,边界基于时区边界生成器项目的数据,该项目又使用开放街道地图(OSM) 来处理其大部分地缘政治边界。但是,Google、Microsoft 和其他公司提供的在线 Web 服务不一定使用相同的地图。因此,根据您使用的数据源,相同的纬度和经度可能会解析为不同的 IANA 时区标识符。


推荐阅读