【问题标题】:gmtime_r & localtime_r() return the same results on vxworksgmtime_r & localtime_r() 在 vxworks 上返回相同的结果
【发布时间】:2015-02-18 00:12:58
【问题描述】:

我在获取 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。

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

【问题讨论】:

标签: c time vxworks


【解决方案1】:

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

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

【讨论】:

  • 谢谢,操作系统是vxworks所以没有这个命令,但是我发现时区是用putenv设置的,现在问题解决了
  • @Rgls 如果你使用的是linux,你可以使用hwclock命令
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 2016-01-18
  • 1970-01-01
相关资源
最近更新 更多