最近我发现C语言有一个奇怪的行为,但不知道为什么会这样。
当我使用setenv()时,将TZ设置为GMT+1。输出的本地时间将比UTC时间少一个小时。(见输出) 实际上是,当我将TZ设置为GMT-1时。输出的本地时间将比UTC时间多一个小时。
这没有意义。如果你不相信,你可以试试下面的C代码。有人知道这种奇怪的行为吗?是bug吗?
代码:
int main(int argc, char** argv)
{
time_t now;
struct tm *local;
setenv("TZ", "GMT+1", 1);
tzset();
now = time(NULL);
//Get the Local time (GMT+1)
local = localtime(&now);
printf("Local time and date: %sn", asctime(local));
//Get the system time (GMT)
local = gmtime(&now);
printf("UTC time and date: %sn", asctime(local));
return 0;
}
输出:Local time and date: Thu Aug 4 14:36:42 2011
UTC time and date: Thu Aug 4 15:36:42 2011
这确实很令人困惑,但不是一个bug。
POSIX指定:
如果前面有"-",则时区应位于本初子午线以东;否则,方向应为西(可选的"+"表示)。
所以,它基本上与你所期望的相反