В следующем примере для daylight
test_daytime.cC (on win32): Как исправить значение дневного света больше 1?
#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-ВАУ) и 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
Я предполагаю, что причина этого является MSVCRT, который используется в MinGW, см MinGW MSYS, MSVCRT, and the TZ environment variable, но не значение> 1 не совсем так (я знаю, что сказать, что страницы Справочника «не нуль ", но существуют ли какие-либо системы, которые не устанавливают значения на другое значение, чем 0/1)?
Любая идея, как исправить это (без изменения среды MSYS)?
Что такое «дневной свет»? Обновление: Nvm, нашел его ... –
Это не должно быть '1'. Допустимые значения: «zero» и «non-zero». Почему вы хотите «исправить» его, если он не «сломан»? –
@EugeneSh. Я знаю, что в manpages говорится «не ноль» (как я писал в вопросе), но я не вижу, что результаты на самом деле правильные и задаются вопросом, устанавливают ли другие среды «дневной свет» другое значение, чем 0/1. Кажется, что 'daylight' для' AEDT' должен возвращать 0, не так ли? –