以下是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环境)?
发布于 2017-02-08 07:08:25
如果要确保任何true (即非零)值变为1,最简单的方法是使用!!
printf ("tz: \"%40s\" - daylight: %d\n", tzval, !!daylight);对于任何非零值的日光,将打印1 (如果值为零,则打印0 )。(希望我没弄错你的问题)
https://stackoverflow.com/questions/42101023
复制相似问题