Linux内核中的人类可读时间戳

12

我该如何在Linux内核中编写人类可读的时间戳?我认为do_gettimeofday返回时代(epoch),但我不想尝试将其转换为可读时间。我只想要一个格式,像这样小时:分钟:秒:毫秒


1
do_gettimeofday是您最好的选择。您将需要自己格式化它。不过,确切的使用情况是什么呢? - Ahmed Masud
2个回答

10

较新的内核具有一个函数time_to_tm,用于将时代时间转换为人类可读格式。

以下是一个示例:

struct timeval t;
struct tm broken;
do_gettimeofday(&t);
time_to_tm(t.tv_sec, 0, &broken);
printk("%d:%d:%d:%ld\n", broken.tm_hour, broken.tm_min, 
                         broken.tm_sec, t.tv_usec);

再次提醒,此功能仅适用于较新的内核。第二个参数time_to_tm是相对于纪元时间的偏移量。在我的本地时间中为0,我不知道您应该使用哪个。


1

虽然我不认为有一个函数可以做到这一点,但如果你不需要天数的话,你可以很容易地实现它。

struct timeval now;
unsinged int temp, second, minute, hour;
do_gettimeofday(&now);
temp = now.tv_sec;
second = temp%60;
temp /= 60;
minute = temp%60;
temp /= 60;
hour = temp%24;
printf("%02d:%02d:%02d:%06d\n", hour, minute, second, now.tv_usec);

请注意,您获取的是 GMT 时间,而不是本地时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接