IANA(互联网编号分配机构)数据文件和来自 www.timeanddate.com 的数据

IANA (Internet Assigned Numbers Authority) data files and data from www.timeanddate.com

如何使用 IANA (Internet Assigned Numbers Authority) 数据文件估算本地时间?

在这个网站上我找到了以下数据: 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

如您所见,Europe/London每年的时间变更规则都不一样: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 数据文件?

您首先查看 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] 日期,则表示无限远的未来。所以伦敦目前由上面 table 中的最后一行管理,其中表示 UTC 偏移量为 0:00,夏令时规则由 Rule EU 管理,要使用的缩写是GMT 表示 "standard" 时间,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 年开始,每年三月的最后一个星期日 01:00 UTC,1:00 被添加到 UTC 偏移量(由 Zone).此示例中未使用包含 S 的最后一列。但是如果 Zone 中指定的缩写包含 %s,那么这个字母将被替换为 %s.

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

Matt Johnson在下面的评论中补充:

You may also be interested in iana.org/time-zones/repository/tz-how-to.html

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