【发布时间】:2013-01-15 20:08:36
【问题描述】:
我看到时间函数有所不同,想知道原因是什么。 目前,我使用的是 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
wtinsec=129
手动从停止减去开始,时间长度为 2:07,但总秒数 (difftime) 为 2:09。由于两次计算都使用相同的原始数据(time1、time2),我最初的想法是 strftime 转换缺乏精度和 difftime 是造成这种情况的原因。
但差异不是恒定的。如果 2 个本地呼叫之间的时间很短(例如 10 秒),则没有区别。但是,随着 2 次调用之间的时间变长,时间总和的差异会变大。 2 分钟,2 秒,5 分钟,4 秒,以此类推……
发生这种情况的任何原因以及是否有任何更准确的(在 C++ 中)最好以微/毫秒为单位,可以跟踪一天中的时间并从另一个中减去一个?
谢谢。
【问题讨论】: