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)
如果您使用 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)