1

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

a.1343323725
b.1343326383

并将结果作为两个时间之间的差返回给我,为 hrs:mins:secs


抱歉有任何混淆,为了澄清我的观点,我编写了一个代码,该代码获取用户的当前时间,执行一些代码块并再次获取时间。我想知道是否可以将差异转换为 hrs:mins:sec 作为字符串文字。

#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;
}
4

2 回答 2

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

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

注意:使用 gettimeofday 作为性能计量器是个坏主意。最好使用的函数是带有 CLOCK_MONOTONIC 时钟 id 的 clock_gettime(它不受挂钟时间变化的影响)。但要注意 CLOCK_MONOTONIC 在 2.6 之前的 Linux 内核中不起作用。使用前检查时钟可用性。

于 2012-07-26T19:10:09.537 回答
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 完全一样,除了输出进入字符串,而不是标准输出,并且 snprintf 是相同的,只是它不会将超过 n 个字符写入字符串,以防止缓冲区溢出。把它们缝合在一起,你就完成了工作。

于 2012-07-26T19:32:11.733 回答