如何计算两个时间值之间的差异?

2 c printing time printf calculation

在我的代码中我有:

struct timeval arrival_time, struct timeval pickup_time;

sprintf(buf, "Stat-Req-Dispatch:: %lu.%06d\r\n", (pickup_time.tv_sec - arrival_time.tv_sec),
        (pickup_time.tv_usec - arrival_time.tv_usec));
Run Code Online (Sandbox Code Playgroud)

.但我注意到这个代码不正确,因为有时打印后的部分可能是负数。

我尝试过:struct timeval dispatch_time = pickup_time-arrival_time;但无法编译。

如何正确打印两个时间之间的差异?


if (pickup_time.tv_usec < arrival_time.tv_usec)
{
    dispatch_time.tv_sec = pickup_time.tv_sec - arrival_time.tv_sec - 1;
    dispatch_time.tv_usec = pickup_time.tv_usec - arrival_time.tv_usec + 1000000;
} else
{
    dispatch_time.tv_sec = pickup_time.tv_sec - arrival_time.tv_sec;
    dispatch_time.tv_usec = pickup_time.tv_usec - arrival_time.tv_usec;
}

sprintf(buf, "%sStat-Req-Dispatch:: %lu.%06d\r\n", buf, dispatch_time.tv_sec, dispatch_time.tv_usec);
Run Code Online (Sandbox Code Playgroud)

Sha*_*awn 5

如果您使用 Linux+glibc 或 BSD 操作系统,它们会为您提供一些宏来操作timevals,其中包括一个用于计算两个时间之间的差异的宏:

#include <stdio.h>
#include <sys/time.h>

int main(void)
{
  struct timeval arrival_time = { .tv_sec = 100, .tv_usec = 50 },
    pickup_time = { .tv_sec = 150, .tv_usec = 0 },
    time_difference;
  timersub(&pickup_time, &arrival_time, &time_difference);
  printf("%ld seconds %ld useconds\n", (long)time_difference.tv_sec,
         (long)time_difference.tv_usec);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)