我不明白爲什麼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