我有一个时间戳代表从午夜开始的纳秒数。我想计算自午夜以来的纳秒数(现在),减去两个时间戳并测量延迟。我想使用最快的操作来执行此操作。
目标平台是 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/