gpt4 book ai didi

c++ - difftime 和 strftime 值中的差异

转载 作者:行者123 更新时间:2023-11-28 07:48:30 24 4
gpt4 key购买 nike

我发现时间函数有所不同,想知道这是什么原因。目前,我正在使用本地时间、mktime、strftime 和 difftime:

time_t ltime; 
ltime = time(NULL);
StartTM = localtime(&ltime);
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。由于两次计算都使用相同的原始数据(时间 1、时间 2),我最初的想法是 strftime 转换缺乏精度,difftime 是造成这种情况的原因。

但差异并不是一成不变的。如果 2 个本地调用之间的时间很短(如 10 秒),则没有区别。但是,随着 2 次调用之间的时间变长,总时间差异变大。在 2 分钟时,它是 2 秒,在 5 分钟时是 4 秒,依此类推......

发生这种情况的任何原因,是否有更准确的(在 C++ 中)最好以微/毫秒为单位,可以跟踪一天中的时间并从另一个中减去时间?

谢谢。

最佳答案

ltimetime1 中的值应该相同;通过 localtime()mktime() 的往返应该给你开始时的答案。同样,当然,对于 ttimetime2

此 C 代码演示了预期的行为。您需要仔细查看您的代码以找出问题所在。

#include <stdio.h>
#include <time.h>
#include <unistd.h>

int main(void)
{

time_t ltime = time(NULL);
struct tm *start = localtime(&ltime);
time_t time1 = mktime(start);
char startbuffer[128];
strftime(startbuffer, sizeof(startbuffer), "%H:%M:%S", start);
printf("lt = %10lu, t1 = %10lu, time = %s\n",
(unsigned long)ltime, (unsigned long)time1, startbuffer);

sleep(10);

time_t ttime = time(NULL);
struct tm *finis = localtime(&ttime);
time_t time2 = mktime(finis);
strftime(startbuffer, sizeof(startbuffer), "%H:%M:%S", finis);
printf("lt = %10lu, t1 = %10lu, time = %s\n",
(unsigned long)ttime, (unsigned long)time2, startbuffer);

printf("diff time = %.2f\n", difftime(time2, time1));

return(0);
}

示例输出(来自 Mac OS X 10.7.5):

lt = 1358284665, t1 = 1358284665, time = 13:17:45
lt = 1358284675, t1 = 1358284675, time = 13:17:55
diff time = 10.00

我建议您查看代码中的值,就像我所做的那样。您可能会(也可能不会)打印出 struct tm 结构的内容。值得制作一个函数来处理 7 行重复代码块;当然,您需要它来返回 time1time2,这样您就可以在“主”代码中做些不同。还请记住 localtime() 可能两次返回相同的指针;在使用结束时间调用 localtime() 后,您无法可靠地使用开始时间结构。

关于c++ - difftime 和 strftime 值中的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14345965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com