【发布时间】:2015-01-03 11:46:45
【问题描述】:
我不明白为什么 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,因为相差一分钟。 我尝试了其他一些值,它们都有效.. 我正在将 CodeBlocks 与 mingw 一起使用。
编辑:答案:使用 tm_isdst 解决了问题!血腥夏令时: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;
【问题讨论】:
-
除了不能编译because the member names are incorrect,一旦你修复了错误you get 60 as expected.。 tl;博士;无法复制。
-
它更有可能与时区有关。您是否注意到您的输出与您想要的结果相差一天?
-
夏令时问题?
-
你的约会对象是否跨越夏令时边界?
-
@Hawknight 初始化两个变量的
tm_isdst字段,看看会发生什么