我对 tm 结构中 tm_isdst 标志的使用有以下疑问。根据手册页和谷歌搜索结果,我了解它的值解释如下
A. 值 0 表示 DST 在指定时间内无效
B. 值为 1 表示 DST 有效
C. 值为 -1 会使 mktime 检查 DST 是否生效。
正是这第三点让我感到困惑。我的疑问是 mktime 如何确定是否必须准确应用 DST。
例如
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) 也可以返回正确的 UTC 值,具体取决于 tm_isdst 值。
现在,如果我设置 tmMyTime.tm_isdst = -1,mktime 会返回什么值?我阅读了有关 TZ 变量、时间数据库等的信息。尽管如此,从逻辑上讲,mktime() 如何确定是否对可能出现两次的 tm 值应用 DST 校正?
我们的时区没有夏令时。因此,我不太确定我的理解是否正确。如果我错了,请纠正我。非常感谢您的帮助。