Почему результат 'gmtime, strftime' отличается от скомпилированного с arm-linux-gnueabihf-gcc и mipsel-openwrt-linux-uclibc-gcc - PullRequest
0 голосов
/ 21 декабря 2018

Я использую strftime для форматирования времени.%Z форматирование часового пояса.Но результат GMT скомпилирован с arm-linux-gnueabihf-gcc, UTC скомпилирован с mipsel-openwrt-linux-uclibc-gcc.

Я не знаю почему.

time_t t = time(NULL);
char stat_timestamp[24] = {0};
strftime(stat_timestamp, sizeof stat_timestamp, "%F %T %Z", gmtime(&t));
printf("gmtime: %s\n", stat_timestamp);

скомпилировано с arm-linux-gnueabihf-gcc:

gmtime: 2018-12-21 XX:XX:XX GMT

скомпилировано с mipsel-openwrt-linux-uclibc-gcc:

gmtime: 2018-12-21 XX:XX:XX UTC

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Почему результат 'gmtime, strftime' отличается

  • Поведение, определяемое реализацией.

C не требует, чтобы оно былото же самое на разных платформах.

%Z заменяется именем или сокращением часового пояса локали или без символов, если часовой пояс не определяется.[tm_isdst] C11dr §7.26.3.5 3

В локали "C" ... %Z, определенной реализацией.§7.26.3.5 7

Обратите внимание, что UTC сродни GMT .См. Также Является ли GMT таким же, как UTC?

0 голосов
/ 21 декабря 2018

Правильное значение на самом деле GMT, которое является временем зоны. UTC не является часовым поясом (если возможно, если вы используете его как сокращение для UTC+0), новместо стандартного времени , , но люди часто ошибочно используют UTC в качестве зоны.

Нет реальных ограничений на то, что реализации возвращают в качестве часового пояса, поскольку в стандарте есть только это сказать:

%Z заменяется именем или сокращением часового пояса локали или без символов, если часовой пояс не определяется.

Местный часовой пояс и дневной светэкономия времени - некоторые из пунктов, перечисленных в разделе «Неопределенное поведение».

...