2

有人可以建议我如何使用

结构时间规范

类型?它只是给了我自 Epoch 以来的时间。我可以使用这种数据类型获得实际的 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:# 日期

2017 年 11 月 14 日星期二 11:34:12 UTC

它不是格式问题。它是关于获取当前的 Linux 时间(以纳秒为单位)。

4

2 回答 2

4

调用后clock_gettimets.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的a,并且具有纳秒部分。

于 2017-11-28T13:36:40.163 回答
3

是什么让你无法做到:

#include <time.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
  struct timespec ts;    
  clock_gettime(CLOCK_REALTIME, &ts);

  char * p = ctime(&ts.tv_sec); /* Note that ctime() isn't thread-safe. */
  p[strcspn(p, "\r\n")] = 0;

  printf("Date: %s %ldns\n", p, ts.tv_nsec);

  ...
}

相关文档

所有实现都支持系统范围的实时时钟,由 CLOCK_REALTIME 标识。它的时间表示自纪元以来的秒和纳秒。

POSIX 文档在这里。)

于 2017-11-28T13:30:18.177 回答