如何使用C语言在Linux中获取当前纳秒级时间戳

4

我知道我们可以使用clock_gettime(CLOCK_MONOTONIC)函数。

我的问题是,如果我需要从纪元以来的纳秒时间,那将是一个巨大的数字。

比如:

  • 从纪元以来的秒数为13438461673,那么纳秒数就是13438461673 * 1000000000

我该如何将其放入一个64位整数中呢?


1
你真正的问题是如何存储一个大于64位的整数吗? - alk
5
不使用该方法,相反地,您可以使用例如 timespec 结构体,就像 clock_gettime 函数中所填充的那样。 - Some programmer dude
你可能想在这里阅读:https://dev59.com/x3DXa4cB1Zd3GeqP8BFo - alk
4
那么你有矛盾的要求,你应该与某人讨论这个问题。 - Some programmer dude
1
@NominalAnimal 是的,我的错误。我假设 time_t 是 long long (64 位)。看来我错打了死板路线... - samairtimer
显示剩余10条评论
1个回答

7

CLOCK_MONOTONIC 是从任意的时间点开始计算的,实际上在Linux中每台机器以及每次开机都可能不同。你只应该使用它来测量时间间隔,例如:

  (int64_t)(after.tv_sec - before.tv_sec) * (int64_t)1000000000UL
+ (int64_t)(after.tv_nsec - before.tv_nsec)

关于时间戳,请使用CLOCK_REALTIME,因为它使用1970年01月01日00:00:00 UTC纪元。 int64_t可以以纳秒精度处理CLOCK_REALTIME时间戳。

(int64_t)(t.tv_sec) * (int64_t)1000000000 + (int64_t)(t.tv_nsec)

- 最早的日期可以追溯到1679年,最晚的日期至少为2261年;范围是±292年,而不是±145年。

- 名义上的动物


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