我在获取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。
所以我的问题是如何将时区设置为系统?
最佳答案
gmtime
和localtime
函数之间的区别在于,gmtime
功能会将日历时间转换为本地时间。
但是localtime
函数会将日历时间转换为细分时间,表示为UTC。
您可以使用hwclock
命令设置时区。只有超级用户有权执行此命令。
以超级用户身份登录并执行此命令。