以下样本用于daylight
测试
#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环境)?
最佳答案
如果要确保任何真(即非零)值变为1
,最简单的方法是使用!!
:
printf ("tz: \"%40s\" - daylight: %d\n", tzval, !!daylight);
将为日光的任何非零值打印
1
(如果该值为零,则打印0
)。(希望我答对了你的问题)