我想知道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;
}
答案 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个字符,以防止缓冲区溢出。 把它们拼凑起来,你就完成了工作。