gmtime_r& localtime_r()在vxworks上返回相同的结果

时间:2014-12-19 04:11:03

标签: c time 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的源代码,我发现localtime_r调用的__getZoneInfo将返回0,这意味着时区为0,实际上时区应该是GMT + 8。

所以我的问题是如何将时区设置为系统?

1 个答案:

答案 0 :(得分:1)

gmtimelocaltime函数之间的区别在于, gmtime函数会将日历时间转换为当地时间。 但localtime函数会将日历时间转换为细分时间,表示为UTC。

您可以使用hwclock命令设置时区。只有超级用户才有权执行此命令。 以超级用户身份登录并执行此命令。