使用struct timespec检索Linux时间

时间:2017-11-28 12:54:50

标签: c linux posix timespec

有人可以建议我如何使用

检索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时间(以纳秒为单位)。

1 个答案:

答案 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具有纳秒级。