C中两毫秒之间的差异

时间:2012-07-26 18:56:58

标签: c time

我想知道C中是否有一个函数需要时间以下格式(当前日期和时间以秒为单位格式)

a.1343323725
b.1343326383

然后将结果作为两小时之间的差异返回给小时:分钟:秒


对于任何混淆感到抱歉,为了澄清我的观点,我写了一个代码来获取用户当前时间执行一些代码块并获得时间。我想知道差异是否可以转换为小时:分钟:秒作为字符串文字。

#include <sys/time.h>
#include <stdio.h>
int main(void)
{
        struct timeval tv = {0};
        gettimeofday(&tv, NULL);
        printf("%ld \n", tv.tv_sec);
        //Execte some code
         gettimeofday(&tv, NULL);
        return 0;
}

2 个答案:

答案 0 :(得分:1)

 unsigned diff = b-a;
 printf("%u:%u:%u", diff/3600, (diff % 3600)/60, diff % 60);
  • diff / 3600是小时。
  • (diff % 3600) / 60是剩余时间
  • (diff % 3600) % 60等于diff % 60是余数秒

限制:此代码不适用于大于136年的差异。

注意:使用gettimeofday作为性能表是不明智的。使用的最佳功能是具有CLOCK_MONOTONIC时钟ID的clock_gettime(它不受挂钟时间变化的影响)。但要注意CLOCK_MONOTONIC在2.6之前的Linux内核中不起作用。使用前请检查时钟可用性。

答案 1 :(得分:1)

首先,你希望得到这些函数返回的timeval结构的时间差,用这样的方法:

int diff = a.tv_sec-b.tv_sec;

其中a和b是gettimeofday返回的值。

接下来,您希望将其分解为小时,分钟和秒钟。

int hours=diff/3600;
int minutes=(diff/60)%60;
int seconds=diff%60;

最后,我们希望使用

中的snprintf函数将数据转换为字符串
#include <stdio.h>
char output[10];
snprintf(output, 10, "%d:%d:%d", hours, minutes, seconds);

sprintf字与printf完全相同,除了输出进入字符串,而不是stdout,snprintf是相同的,除了它不会在字符串中写入超过n个字符,以防止缓冲区溢出。 把它们拼凑起来,你就完成了工作。