C(在win32上):如何修复大于1的日光值?

C(在win32上):如何修复大于1的日光值?,c,windows,gcc,cygwin,mingw,C,Windows,Gcc,Cygwin,Mingw,以下为测试样本_.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 =

以下为测试样本_.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;
}
在Cygwin(
uname
:Cygwin\u NT-10.0-WOW)和MSYS2(
uname
:MSYS\u NT-10.0)上生成以下输出

这是MSYS上的结果(
uname
:MINGW32\u NT-6.2,同一台机器)

我假设原因是MinGW中使用的MSVCRT,请参阅,但值>1不是完全错误的(我知道手册页上说“不为零”,但是否有任何系统没有将值设置为与0/1不同的值)


知道如何解决这个问题(不改变MSYS环境)吗

如果要确保任何真(即非零)值变为
1
,最简单的方法是使用

printf ("tz: \"%40s\" - daylight: %d\n", tzval, !!daylight);
将为日光的任何非零值打印
1
(如果该值为零,则打印
0
)。
(希望我没弄错你的问题)

什么是日光?更新:Nvm,找到了…它不必是
1
。有效值为
非零
。如果它没有“损坏”,你为什么要“修复”它?你自己给出的链接说,
daylight
变量已经过时了。它还说“请注意,变量daylight并不表示夏令时现在适用。它用来给出一些算法的编号”。因此,您可以看到“some algorithm”的编号。这可能是权威规范:同意,使用
-无需“修复”。
tz: "                                     TZ=" - daylight: 0
tz: "          TZ=EST+5EDT,M3.2.0/2,M11.1.0/2" - daylight: 1
tz: "                                 TZ=AEDT" - daylight: 0
tz: "                                     TZ=" - daylight: 1
tz: "          TZ=EST+5EDT,M3.2.0/2,M11.1.0/2" - daylight: 69
tz: "                                 TZ=AEDT" - daylight: 84
printf ("tz: \"%40s\" - daylight: %d\n", tzval, !!daylight);