c - 自午夜以来的纳秒

标签 c linux time

我有一个时间戳代表从午夜开始的纳秒数。我想计算自午夜以来的纳秒数(现在),减去两个时间戳并测量延迟。我想使用最快的操作来执行此操作。

目标平台是 x86-64 Linux,Clang 编译器,没有旧的内核或硬件,我不关心夏令时,没有要涵盖的圆形案例等。

我明白了:

struct timespec now;
clock_gettime(CLOCK_REALTIME, &now);

将返回自纪元以来的秒数和最后一秒后的纳秒数。

因此我认为我只需要创建一个代表午夜的时间点,从午夜提取自纪元以来的秒数,然后执行:

now_nanos = (((now.seconds_since_epoch) - (midnight.seconds_since_epoch)) x 1 billion) + now.nanos_since_last_second

如何创建代表午夜的时间点,以提取自大纪元以来的秒数?

我看过使用 mktime() 返回 time_t 的示例,但我不确定如何提取自 Epoch 以来的秒数?

最佳答案

首先用time获取当前时间。然后将其结果传递给 localtime_r 以将时间分解为其组成部分。将小时、分钟和秒归零,然后使用 mktime 切换回纪元以来的秒数。

time_t now = time(NULL);
struct tm tm;
localtime_r(&now, &tm);
tm.tm_sec = 0;
tm.tm_min = 0;
tm.tm_hour = 0;
time_t start_of_day = mktime(&tm);

关于c - 自午夜以来的纳秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58907934/

相关文章:

c - C 中的多线程套接字

linux - CentOS 6.5 如何让新文件继承父文件夹所有权?

c++ - 符合标准的 C++ 实现如何表明它不知道当前日期和时间?

algorithm - GCD算法的运行时间?

c - 如何将 C 声明链接到非标准部分中的符号?

c - 为什么 system() 存在?

c - Windows 上 C 程序中的系统调用问题

linux - 为什么一个剥离的二进制文件在反汇编文件中仍然可以有库调用信息?

c - 两兄弟怎么联系?

java - 如何每秒增加一个变量?