如何正确地从tm转换为time_t?

时间:2015-08-17 16:18:25

标签: c++ time

我想创建一个tm并用特定时间填充它,然后我想从中减去一定的时间。

这是我到目前为止所拥有的

time_t time_1, time_2;
struct tm tm;
struct tm tm2;

strptime("1 1 1900 12:43:40", "%d %m %Y %H:%M:%S", &tm);
strptime("1 1 1900 11:33:45", "%d %m %Y %H:%M:%S", &tm2);


time_1 = mktime(&tm);
time_2 = mktime(&tm2);

//    time_1  = difftime(time_2,  time_1);                                                
cout << ctime(&time_1) << endl;
cout << asctime(&tm);

我打算使用difftime来计算差异,但是ctime并没有显示与asctime相同的时间,我哪里出错?

1 个答案:

答案 0 :(得分:1)

差异可能是由于夏令时差异 - 即struct tm的tm_isdst字段。调用ctime(t)等同于asctime(localtime(t)),因此请尝试仅调用localtime(time_1)并将结果(逐字段)与tm进行比较。我还建议不要调用你的变量tm,因为它与结构名称相同时会引起混淆,特别是因为这是C ++,因此struct关键字是可选的。