gmtime_r и localtime_r() возвращают одинаковые результаты на vxworks

У меня проблема с получением времени UTC. С тестовым кодом я обнаружил, что и gmtime, и localtime возвращают один и тот же результат.

void testTimeLib()
{
    struct tm  utcTime, localTime;
    time_t now;
    char utcStr[80], localStr[80];

    time(&now);
    gmtime_r(&now, &utcTime);
    localtime_r(&now, &localTime);

    memset(utcStr, 0, sizeof(utcStr));
    strftime(utcStr, sizeof(utcStr), "%Y-%m-%dT%H:%M:%S", &utcTime);

    memset(localStr, 0, sizeof(localStr));
    strftime(localStr, sizeof(localStr), "%Y-%m-%dT%H:%M:%S", &localTime);

    printf("UTC Time\tutcTime <%s>\n", utcStr);
    printf("Local Time\tlocalTime <%s>\n", localStr);
}

результат

-> testTimeLib
UTC Time    utcTime <2014-12-19T10:57:33>
Local Time  localTime <2014-12-19T10:57:33>

Проверив исходный код gmtime_r и localtime_r, я обнаружил, что __getZoneInfo, вызванный localtime_r, вернет 0, что означает, что часовой пояс равен 0, на самом деле часовой пояс должен быть GMT+8.

Итак, мой вопрос: как я могу установить системный часовой пояс?


person Rgls    schedule 19.12.2014    source источник
comment
stackoverflow.com/a/11785853/2410359 может помочь   -  person chux - Reinstate Monica    schedule 19.12.2014


Ответы (1)


Разница между функциями gmtime и localtime заключается в том, что функция gmtime преобразует календарное время в местное время. но функция localtime преобразует календарное время в разбитое время, которое выражается как UTC.

Вы можете использовать команду hwclock для установки часового пояса. только суперпользователь имеет разрешение на выполнение этой команды. войдите в систему как суперпользователь и выполните эту команду.

person sharon    schedule 19.12.2014
comment
Спасибо, ОС vxworks, поэтому такой команды нет, но я обнаружил, что часовой пояс установлен с помощью putenv, и теперь проблема решена. - person Rgls; 19.12.2014
comment
@Rgls, если вы используете Linux, вы можете использовать команду hwclock - person sharon; 19.12.2014