我在莫斯科时区配置了一个系统。莫斯科每年3月的最后一个星期天都会进入夏令时。莫斯科日光节省时间(MSD)为UTC +4小时。在十月的最后一个星期日,夏令时结束,它可以追溯到莫斯科标准时间(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()设置还是不会被设置。我的观察是在MSK中的上午2点到凌晨3点(第二个实例)的一小时窗口期间,tm_isdst标志由localtime()设置。是这个错误还是预期的行为?
对于记录,我的timezone / Europe tz数据库文件是最新的,相应的时区数据库文件由zic编译器正确编译为/ usr / share / zoneinfo / Europe / Moscow。
答案 0 :(得分:0)
通过对规范的一些研究,看起来C确定了来自环境变量的所有这些信息。在这种情况下,为POSIX指定了TZ环境变量。 Windows将其存储在注册表位置。 在这1小时期间,您显然不再处于夏令时,因此根据tm_isdst标志的定义,它应该是明确的。
要知道它是否是编译器/库实现或操作系统的错误,您必须在此期间直接检查环境变量值。