我在莫斯科时区配置了一个系统。莫斯科每年三月的最后一个星期日进入夏令时。莫斯科夏令时 (MSD) 为 UTC +4 小时。在 10 月的最后一个星期日,夏令时结束并回到莫斯科标准时间 (MSK),即 UTC +3 小时。
从 MSD 到 MSK 的过渡发生在 10 月的最后一个星期日凌晨 3 点。到凌晨 3 点,时钟再次重置回凌晨 2 点。因此,在 10 月的最后一个星期日,将有两次凌晨 2 点。在凌晨 2 点的第一个实例中,莫斯科仍处于 MSD(UTC +4)。第二次凌晨 2 点,莫斯科在 MSK(UTC +3)。
我的问题是,如果我使用 localtime() 函数在 10 月的最后一个星期日凌晨 2 点的第二个实例获取本地时区信息,tm_isdst 标志是由 localtime() 设置还是不设置。我的观察是 tm_isdst 标志是由 localtime() 在 MSK 的凌晨 2 点到凌晨 3 点(第二个实例)的一小时窗口期间设置的。这是错误还是预期的行为?
作为记录,我的时区/欧洲 tz 数据库文件是最新的,并且相应的时区数据库文件由 zic 编译器正确编译为 /usr/share/zoneinfo/Europe/Moscow。