我看到时间函数有所不同,想知道是什么原因。目前,我正在使用 localtime、mktime、strftime 和 difftime:
time_t ltime;
ltime = time(NULL);
StartTM = localtime(<ime);
time_t time1 = mktime(StartTM );
char startbuffer [128];
strftime( start_buffer, 128, "%H:%M:%S", StartTM );
<<Do some stuff, take some time >>>
time_t ttime;
ttime = time(NULL);
StopTM = localtime(&ttime);
time_t time2 = mktime(StopTM );
char stop_buffer [128];
strftime( stop_buffer, 128, "%H:%M:%S:", StopTM );
double wtinsec = difftime(time2, time1);
执行后,输出如下:
停止缓冲区=08:46:18
开始缓冲区=08:44:11
wtsec=129
手动从停止减去开始,时间长度为 2:07,但总秒数(difftime)为 2:09。由于两次计算都使用相同的原始数据(time1、time2),我最初的想法是 strftime 转换缺乏精度,而 difftime 是造成这种情况的原因。
但差异不是恒定的。如果 2 个本地呼叫之间的时间很短(例如 10 秒),则没有区别。但是,随着 2 次调用之间的时间变长,时间总和的差异会变大。2分钟,2秒,5分钟,4秒,依此类推......
为什么会发生这种情况,是否有任何更准确的(在 C++ 中)最好以微/毫秒为单位,可以跟踪一天中的时间并从另一个中减去一个?
谢谢。