C(在win32上):如何修复大于1的日光值?
以下为测试样本_.cC(在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 =
#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);