有人可以建议我如何使用
检索linux时间struct timespec ts
类型?它只是给了我自大纪元以来的时间。我可以使用此数据类型获得实际的Linux时间吗?
简要背景:我正在嵌入式设备上编写一个记录器实用程序,其时间戳分辨率以毫秒/微秒为单位。源添加目标组件使用的时间戳。
struct stLogItem logitem; //stLogItem has a member, struct timespec ts
clock_gettime(clk_id, &logitem.ts);
目标组件正在文件/控制台上打印此日志时间戳。但打印出来的日期是Epoch以来的时间,而不是实际的Linux日期。
印刷数据是: 1970-01-01 23:30:07.586864475
然而,Linux日期不同,如下所示:
root @ imh:#date
11月14日星期二11:34:12 UTC 2017
它不是格式问题。它是关于获取当前的Linux时间(以纳秒为单位)。
答案 0 :(得分:4)
调用clock_gettime
后,ts.tv_sec
的类型time_t
将填充自纪元以来的秒数时间戳。您可以将其直接传递给localtime
:
struct timespec ts;
clock_gettime(clk_id, &ts);
struct tm *my_tm = localtime(&ts.tv_sec);
现在my_tm
指向struct tm
,其时间分为年/月/日/小时/分钟/秒,ts.tv_nsec
具有纳秒级。