我不明白为什么difftime会返回一个奇怪的值,所以这里是数据集和我正在使用的代码。difftime在特定日期返回奇怪的值
代码:
struct tm currentTime;
currentTime.tm_year = 2014 - 1900;
currentTime.tm_mon = 9 - 1;
currentTime.tm_mday = 6;
currentTime.tm_hour = 23;
currentTime.tm_min = 59;
currentTime.tm_sec = 0;
currentTime.tm_wday = 7 - 1;
struct tm previousTime;
previousTime.tm_year = 2014 - 1900;
previousTime.tm_mon = 9 - 1;
previousTime.tm_mday = 6;
previousTime.tm_hour = 23;
previousTime.tm_min = 58;
previousTime.tm_sec = 0;
previousTime.tm_wday = 7 - 1;
cout << difftime(mktime(¤tTime), mktime(&previousTime)) << endl;
此打印:
3660
任何想法,为什么我得到这个值? 我应该得到60,因为有一分钟的差异。 我尝试了一些其他的值,他们都工作.. 我用mingw使用CodeBlocks。
编辑:回答:使用tm_isdst解决了问题!血腥DST:P
struct tm currentTime;
currentTime.tm_year = 2014 - 1900;
currentTime.tm_mon = 9 - 1;
currentTime.tm_mday = 6;
currentTime.tm_hour = 23;
currentTime.tm_min = 59;
currentTime.tm_sec = 0;
currentTime.tm_wday = 7 - 1;
currentTime.tm_isdst = - 1;
struct tm previousTime;
previousTime.tm_year = 2014 - 1900;
previousTime.tm_mon = 9 - 1;
previousTime.tm_mday = 6;
previousTime.tm_hour = 23;
previousTime.tm_min = 58;
previousTime.tm_sec = 0;
previousTime.tm_wday = 7 - 1;
previousTime.tm_isdst = - 1;
cout << difftime(mktime(¤tTime), mktime(&previousTime)) << endl;
除了这个不编译[因为成员名称不正确](http://en.cppreference.com/w/cpp/chrono/c/tm),一旦你修正了错误[你按预期得到60。](http://coliru.stacked-crooked.com/a/af76e98edee8cdbb)。 TL;博士;不能重现。 – Borgleader 2014-11-06 20:09:22
@Borgleader对不起,我没有很好地复制我的程序。我用新的值更新了它,但我仍然得到一个奇怪的值:3660 – 2014-11-06 20:12:36
因此,您的代码中实际上包含'previousTime.tm_hour = 22;'。 – 2014-11-06 20:16:13