daylight
的以下示例test_daytime.c
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int
main (void)
{
char *tzval;
tzval = "TZ=";
putenv(tzval);
tzset();
printf ("tz: \"%40s\" - daylight: %d\n", tzval, daylight);
tzval = "TZ=EST+5EDT,M3.2.0/2,M11.1.0/2";
putenv(tzval);
tzset();
printf ("tz: \"%40s\" - daylight: %d\n", tzval, daylight);
tzval = "TZ=AEDT";
putenv(tzval);
tzset();
printf ("tz: \"%40s\" - daylight: %d\n", tzval, daylight);
return 0;
}
编译为
$gcc test_daytime.c -o test_daytime.exe && ./test_daytime.exe
在 Cygwin(uname
:CYGWIN_NT-10.0-WOW)和 MSYS2(uname
:MSYS_NT-10.0)上产生以下输出
tz: " TZ=" - daylight: 0
tz: " TZ=EST+5EDT,M3.2.0/2,M11.1.0/2" - daylight: 1
tz: " TZ=AEDT" - daylight: 0
这是在 MSYS 上的结果(uname
:MINGW32_NT-6.2,同一台机器)
tz: " TZ=" - daylight: 1
tz: " TZ=EST+5EDT,M3.2.0/2,M11.1.0/2" - daylight: 69
tz: " TZ=AEDT" - daylight: 84
我假设这是因为 MinGW 中使用的 MSVCRT,请参阅 MinGW MSYS, MSVCRT, and the TZ environment variable ,但值 > 1 不是完全错误的吗(我知道联机帮助页上说“不为零”,但是否有任何系统不会将值设置为不同于 0/1 的值)?
知道如何解决这个问题(不改变 MSYS 环境)吗?
如果要确保任何 true(即非零)值变为 1
,最简单的方法是使用 !!
:
printf ("tz: \"%40s\" - daylight: %d\n", tzval, !!daylight);
将为日光的任何非零值打印1
(如果值为零则打印0
)。(希望我正确回答了你的问题)
我是一名优秀的程序员,十分优秀!