我是C ++的新手,我在用c ++转换时间戳UNIX时遇到问题,因为转换恰好提前一小时,我认为错误很愚蠢,并且是在字符串的时间戳转换中,因为的值时间戳是正确的。
这是我的代码
string BlockHeader::convertTimeStamp() {
char data[30];
time_t timeToValue = time;
tm *tmTime = localtime(&timeToValue);
strftime (data,30,"%F %T", tmTime);
string dataString = string(data);
cout << dataString;
return dataString;
}
正确的值为1231006505 -> 2009-01-03 18:15:05
,但转换的值为2009-01-03 19:15:05
对不起,我的英语很糟糕,但是我的学习却很。
感谢您的帮助
答案 0 :(得分:1)
正确的值是1231006505-> 2009-01-03 18:15:05
不,不是因为
欧洲/罗马
欧洲/罗马时区比UTC早一小时,因此1231006505 正确地在该时区2009-01-03 19:15:05。
如果要使用UTC时间,则需要使用gmtime
而不是localtime
。函数名称中的 Local 是指 local 时区。
答案 1 :(得分:0)
使用gmtime
代替localtime
。
localtime会考虑您的时区(现在是UTC +1),而gmtime则没有。