C/ c++:为什么localtime的时区显示不正确?



最近我发现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指定:

如果前面有"-",则时区应位于本初子午线以东;否则,方向应为西(可选的"+"表示)。

所以,它基本上与你所期望的相反

相关内容

  • 没有找到相关文章

最新更新