小编And*_*w G的帖子

time.h中的tzset和daylight全局变量解释

在日光全局变量的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)

c timezone dst

6
推荐指数
2
解决办法
2831
查看次数

标签 统计

c ×1

dst ×1

timezone ×1