【发布时间】:2015-11-30 06:42:49
【问题描述】:
在日光全局变量的 time.h 标头中,它说: “如果夏令时规则适用,则此变量具有非零值。非零值并不一定意味着夏令时现在有效;它仅表示夏令时有时有效。”
现在我注意到在 Solaris 11.2 和 Linux 中,“daylight”变量都设置为 1,即使我的时区根本不使用夏令时(澳大利亚/布里斯班)。
示例代码证实了这一点,如果我运行 tzset 并输出我们得到的全局变量: 日光 = 1 tz[0] = [AEST] tz[1] = [AEDT] 时区 = [-36000]
但据我了解,日光应设置为 0,因为我的区域在一年中的任何时候都没有夏令时。
我还注意到 struct tm 在设置为当前时间时返回 tm_isdst = 0,这是正确的。
那么为什么将日光变量设置为 1?不应该设置为0吗?还是我误解了这个?
代码是:
#include <stdio.h>
#include <time.h>
void main()
{
time_t t;
struct tm *tms = { 0 };
tzset();
time(&t);
tms = localtime(&t);
printf("date and time : %s",ctime(&t));
printf("daylight = %d tz[0] = [%s] tz[1] = [%s] timezone = [%ld]\n", daylight, tzname[0], tzname[1], timezone);
printf("tm_isdst = %d\n",tms->tm_isdst);
}
输出是:
date and time : Mon Nov 30 16:41:01 2015
daylight = 1 tz[0] = [AEST] tz[1] = [AEDT] timezone = [-36000]
tm_isdst = 0
【问题讨论】: