【问题标题】:Get historical timezone info for a location获取某个位置的历史时区信息
【发布时间】:2021-01-20 03:29:13
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 第一个问题,已经回答了in this answer。第二,这 IANA 数据库的用途,所以我不确定你在那儿问的究竟是什么。请举个例子。
  • 据我了解,IANA 数据库允许查看特定时区何时更改其偏移量(夏令时)。我正在谈论的案例:例如,某个城市与 XXX 时区相关,并且在某个日期之后它开始与另一个时区 YYY 相关(不是偏移变化,但整个时区由于某些政治决定而发生了变化)。 2014 年之前克里米亚城市的示例位于某个欧洲/XXX 区域(其中偏移量为 +2,夏令时更改),而在某些事件之后,它们处于另一个 MSK(偏移量为 +3,没有夏令时更改)时区

标签: timezone


【解决方案1】:

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

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

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

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

在极少数情况下,IANA TZDB 不会按照您建议的方式涵盖时区变化:

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

Theory and pragmatics of the tz code and data(TZDB 中的theory.html 文件)中进一步描述了这些内容。有时也会在the tz mailing list 上讨论和辩论。

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

【讨论】:

  • 非常感谢,这个很全面!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
相关资源
最近更新 更多