gpt4 book ai didi

c++ - mktime 和 tm_isdst 标志

转载 作者:可可西里 更新时间:2023-11-01 16:38:22 28 4
gpt4 key购买 nike

我对 tm 结构中 tm_isdst 标志的使用有以下疑问。根据手册页和谷歌搜索结果,我知道它的值解释如下

一个。值 0 表示 DST 在表示的时间内无效

B.值为 1 表示 DST 生效

C.值 -1 会导致 mktime 检查 DST 是否生效。

这是第三点让我感到困惑。我的疑问是 mktime 如何准确判断是否必须应用夏令时。

例如

My Time Zone = GMT + 3:00
DST shifting = +1 Hour at 5:00 AM in January (to keep it simple)
Current UTC time = "01/Jan/2012 00:00:00"
UTC time in seconds time_t timetUTC = X seconds
Hence my time is = "01/Jan/2012 03:00:00"

随着时间的推移,我的时间值变化如下

"01/Jan/2012 04:00:00"            (X + 1 * 60 * 60)
"01/Jan/2012 05:00:00" (X + 2 * 60 * 60)
"01/Jan/2012 05:59:59" (X + 2 * 60 * 60 + 59)
"01/Jan/2012 05:00:00" (X + 3 * 60 * 60)
"01/Jan/2012 06:00:00" (X + 4 * 60 * 60)

据我了解

tm tmMyTime = localtime_r(X + 2 * 60 * 60) will set tmMyTime.tm_isdst to 0
tm tmMyTime = localtime_r(X + 3 * 60 * 60) will set tmMyTime.tm_isdst to 1

这样,即使 tm 结构的所有其他组件在两种情况下都相同,mktime(tmMyTime) 可以根据 tm_isdst 值返回正确的 UTC 值。

现在,如果我设置 tmMyTime.tm_isdst = -1,mktime 会返回什么值?我阅读了有关 TZ 变量、时间数据库等的信息。尽管如此,从逻辑上讲,mktime() 如何确定是否对可能出现两次的 tm 值应用 DST 校正?

我们的时区没有夏令时。因此我不太确定我的理解是否是正确的。如果我错了,请纠正我。非常感谢您的帮助。

最佳答案

简而言之:它依赖于实现。

mktime 通过检查语言环境了解 DST 规则。

对于一年中的大部分时间,mktime 可以确定夏令时是否适用于特定的本地时间。问题确实是 DST 向后移动时的“重复”小时(在您的示例中为 05:00:00 - 05:59:59)。对于这个本地时间范围,给定 tm_isdst = -1,mktime 无法知道 DST 是否生效。选择其中的哪一个,因实现而异。使用 GNU 版本的 mktime,返回转换前的 UTC。

关于c++ - mktime 和 tm_isdst 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10533322/

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