在日光全局变量的time.h标题中,它说:"如果夏令时规则适用,则此变量具有非零值.非零值并不一定意味着夏令时现在有效;它仅表示夏令时时间有时是有效的."
现在我注意到在Solaris 11.2和Linux中,"daylight"变量被设置为1,即使我的时区根本不使用夏令时(澳大利亚/布里斯班).
示例代码确认了这一点,如果我运行tzset并输出我们得到的全局变量:daylight = 1 tz [0] = [AEST] tz [1] = [AEDT] timezone = [-36000]
但根据我的理解,日光应该设置为0,因为我的区域在一年中的任何时候都没有夏令时.
我还注意到,当设置为当前时间时,struct tm返回tm_isdst = 0,这是正确的.
那么为什么daylight变量设置为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);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
date and time : Mon Nov 30 16:41:01 2015 …Run Code Online (Sandbox Code Playgroud)