1

如何使用 IANA(互联网号码分配机构)数据文件估算本地时间?

在这个网站上,我找到了以下数据: https ://www.timeanddate.com/time/zone/uk/london

2015  Sun, 29 Mar, 01:00GMT → BST+1 hour (DST start)UTC+1h
      Sun, 25 Oct, 02:00BST → GMT-1 hour (DST end)UTC
2016  Sun, 27 Mar, 01:00GMT → BST+1 hour (DST start)UTC+1h
      Sun, 30 Oct, 02:00BST → GMT-1 hour (DST end)UTC
2017  Sun, 26 Mar, 01:00GMT → BST+1 hour (DST start)UTC+1h
      Sun, 29 Oct, 02:00BST → GMT-1 hour (DST end)UTC
2018  Sun, 25 Mar, 01:00GMT → BST+1 hour (DST start)UTC+1h
      Sun, 28 Oct, 02:00BST → GMT-1 hour (DST end)UTC
2019  Sun, 31 Mar, 01:00GMT → BST+1 hour (DST start)UTC+1h
      Sun, 27 Oct, 02:00BST → GMT-1 hour (DST end)UTC

如您所见,欧洲/伦敦时间更改规则每年都不同:2018 年规则从 3 月 25 日开始适用,2019 年从 3 月 31 日开始适用,等等。

但我找不到有关 IANA 数据分发的信息。 https://www.iana.org/time-zones

从 tzdata2016h.tar.gz 提取文件europe

# Zone  NAME        GMTOFF  RULES   FORMAT  [UNTIL]
Zone    Europe/London   -0:01:15 -  LMT 1847 Dec  1  0:00s
             0:00   GB-Eire %s  1968 Oct 27
             1:00   -   BST 1971 Oct 31  2:00u
             0:00   GB-Eire %s  1996
             0:00   EU  GMT/BST

也许我不明白如何使用 IANA 数据?如何提取 IANA 数据文件?

4

1 回答 1

2

您首先查看以下Zone条目Europe/London

# Zone  NAME             GMTOFF RULES   FORMAT  [UNTIL]
Zone    Europe/London   -0:01:15 -      LMT     1847 Dec  1  0:00s
                         0:00   GB-Eire %s      1968 Oct 27
                         1:00   -       BST     1971 Oct 31  2:00u
                         0:00   GB-Eire %s      1996
                         0:00   EU      GMT/BST

[UNTIL]除了最后一个,每一行都以一个日期结束。如果没有[UNTIL]日期,则意味着无限远的未来。因此,伦敦目前由上表中的最后一行管理,该行表示 UTC 偏移量为 0:00,夏令时规则由 管理Rule EU,并且要使用的缩写GMT用于“标准”时间和BST夏令时。

现在去找Rule EU

# Rule      NAME    FROM    TO      TYPE    IN      ON       AT     SAVE    LETTER/S
Rule        EU      1977    1980    -       Apr     Sun>=1   1:00u  1:00    S
Rule        EU      1977    only    -       Sep     lastSun  1:00u  0       -
Rule        EU      1978    only    -       Oct      1       1:00u  0       -
Rule        EU      1979    1995    -       Sep     lastSun  1:00u  0       -
Rule        EU      1981    max     -       Mar     lastSun  1:00u  1:00    S
Rule        EU      1996    max     -       Oct     lastSun  1:00u  0       -

您正在寻找当前有效的规则。目前有两个,最后两排。

倒数第二行表示,从 1981 年开始,每年 3 月的最后一个星期日 01:00 UTC,将 1:00 添加到 UTC 偏移量(由 指定Zone)。S此示例中未使用包含的最后一列。但是,如果指定的缩写Zone包含 a %s,那么这个字母将被替换为%s

最后一行表示,从 1996 年开始,每年 10 月的最后一个星期日 01:00 UTC,0:00 被添加到 UTC 偏移量(由 指定Zone)。

马特约翰逊在下面的评论中补充道:

您可能还对iana.org/time-zones/repository/tz-how-to.html感兴趣

我认为这是一个如此重要的评论,它应该在答案中以获得更高的知名度。谢谢马特!

于 2016-11-01T14:22:53.487 回答