我有一个时间戳,表示午夜以来的纳秒。我想计算自午夜以来的纳秒数(现在),以减去两个时间戳并测量延迟。我想使用最快的操作来做到这一点。
目标平台是x86-64 Linux,Clang编译器,没有旧的内核或硬件,我不在乎夏时制,也没有涵盖其他方面的问题。
我了解:
struct timespec now;
clock_gettime(CLOCK_REALTIME, &now);
将返回距Epoch以来的秒数和最后一秒后的纳秒数。
因此,我认为我只需要创建一个代表午夜的时间点,从午夜起提取距大纪元以来的秒数,然后执行:
now_nanos = (((now.seconds_since_epoch) - (midnight.seconds_since_epoch)) x 1 billion) + now.nanos_since_last_second
如何创建表示午夜的时间点,以提取距大纪元以来的秒数?
我看过使用mktime()
返回time_t
的示例,但是我不确定如何提取距大纪元以来的秒数?
答案 0 :(得分:2)
首先使用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);