How can I write human readable timestamp in linux kernel? I think do_gettimeofday
returns epoch but I don't want to try to convert it to readable time. I just want a format like Hour:Min:Sec:Msec
.
Thanks
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Later kernels have a function time_to_tm
to break epoch time into human readable format.
Here's an example:
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);
Again, this is only available in later kernels. The second parameter time_to_tm
is an offset to the epoch time. In my local time is 0, I don't know which one you should use.
回答2:
Though I don't think there's a function for this, you can do it quite easily if you don't need the day.
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);
Note that you get GMT time, not local time.