计算两个变化时间之间的差异

Taking the difference between two changing times

我想将格式为 MM DD YYYY HH:MM:SS.ns.

的两次相减

这是粘贴在程序顶部和底部的代码片段,因为我将程序的总时间用于单独计算:

clock_gettime(CLOCK_REALTIME, &start);
struct tm* start_timer = localtime(&start.tv_sec);
size_t ns1 = strftime(timer, 100, "%B %e, %G %R:%S.", start_timer);

snprintf(timer + ns1, 100 - ns1, "%.9ld", start.tv_nsec);
fprintf(fout, "%s", timer);

/*---------------------------------
 Main function doing calculations
-----------------------------------*/

clock_gettime(CLOCK_REALTIME, &end);
struct tm* stop_timer = localtime(&end.tv_sec);
size_t ns2 = strftime(timer, 100, "%B %e, %G %R:%S.", stop_timer);

snprintf(timer + ns2, 100 - ns2, "%.9ld", end.tv_nsec);
fprintf(fout, "%s", timer);

计算完成后,打印开始时间和结束时间(仅作为示例):

Start time: April 12, 2022 13:45:29.123456789
End time: April 12, 2022 13:45:51.234567890

基本上,这些值会根据我 运行 的时间以及程序 运行 的时长不断变化。我想做的是 将这些时间之间的差异报告为整个程序的总时间。我的意思是我希望它像这样打印:

Overall time: 03:12.345678901

我该如何实现?我在想我必须为此使用 strptime,而且我知道 difftime 将成为一名球员,但我不完全确定我会怎么做,因为变量是不断变化的改变。我假设将这些存储到变量中,但我收到一条错误消息:

assignment to ‘time_t’ {aka ‘long int’} from ‘char *’ makes integer from pointer without a cast [-Wint-conversion]

找到 startend 之间的时间减去两个成员。

double diff_seconds = difftime(end.tv_sec, start.tv_sec) + 
    (end.tv_nsec - start.tv_nsec)/1.0e9;

I want it to print like this: "Overall time: 03:12.345678901"

double min = trunc(diff_seconds / 60);
double sec = diff_seconds - min * 60;
// Possible format - needs checking
printf("Overall time: %02.0f:%02.9f\n", min, sec);

由于四舍五入,我想知道“xxxx.60.000000000”是否可能 - 嗯....

diff_seconds 超过 17 年时,这是可能的,所以对于 OP 来说,不是一个大问题。

替代代码可以确保 diff_seconds * 10e9 适合 long long,然后将 nano_seconds 作为大整数处理 - 未显示。