gpt4 book ai didi

c - 为什么 localtime() 在 DST 结束并且时间回落一小时时将 tm_isdst 标志设置为 1 小时

转载 作者:太空宇宙 更新时间:2023-11-04 00:09:51 25 4
gpt4 key购买 nike

我有一个在莫斯科时区配置的系统。莫斯科在每年三月的最后一个星期日进入夏令时。莫斯科夏令时 (MSD) 为 UTC +4 小时。在 10 月的最后一个星期日,夏令时结束,回到莫斯科标准时间 (MSK),即 UTC +3 小时。

从 MSD 到 MSK 的过渡发生在 10 月的最后一个星期日凌晨 3 点。到凌晨 3 点,时钟再次重置为凌晨 2 点。因此,在 10 月的最后一个星期日,将有两次凌晨 2 点。在凌晨 2 点的第一个实例中,莫斯科仍处于 MSD(UTC +4)。在凌晨 2 点的第二个实例中,莫斯科位于 MSK (UTC +3)。

我的问题是,如果我在 10 月的最后一个星期日凌晨 2 点的第二个实例使用 localtime() 函数获取本地时区信息,tm_isdst 标志将由 localtime() 设置还是不设置.我的观察是,在 MSK 的凌晨 2 点到凌晨 3 点(第二个实例)的一小时窗口期间,tm_isdst 标志由 localtime() 设置。这是错误还是预期的行为?

作为记录,我的时区/欧洲 tz 数据库文件是最新的,并且相应的时区数据库文件被 zic 编译器正确编译为/usr/share/zoneinfo/Europe/Moscow。

最佳答案

从对规范的一些研究来看,C 似乎从环境变量中确定了所有这些信息。在这种情况下,TZ 环境变量是为 POSIX 指定的。 Windows 将其存储在注册表位置。在这 1 小时内,您显然不再处于夏令时,因此根据 tm_isdst 标志的定义,它应该是明确的。

要知道它是否是编译器/库实现或操作系统的错误,您必须在此期间直接检查环境变量值。

关于c - 为什么 localtime() 在 DST 结束并且时间回落一小时时将 tm_isdst 标志设置为 1 小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5026077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com