【发布时间】:2018-01-09 10:19:20
【问题描述】:
uint64_t timestamp_nanoseconds = 634019142119225390;
time_t result = timestamp_nanoseconds / 1000000000;
struct tm * timeinfo = gmtime(&result);
struct tm dateInfo ;
dateInfo.tm_mday = timeinfo->tm_mday ;
dateInfo.tm_mon = timeinfo->tm_mon ;
dateInfo.tm_year = timeinfo->tm_year ;
dateInfo.tm_hour = 0 ;
dateInfo.tm_min = 0 ;
dateInfo.tm_sec = 0 ;
time_t NoOfSecInDate = mktime ( &dateInfo );
从以纳秒为单位的输入时间戳中,我们可以得到日期,如在 dateInfo 结构中设置的代码所示。从那时起,我们需要从输入日期的午夜开始计算经过的时间(以秒为单位)。
我们将输入作为自 1970 年 1 月 1 日以来经过的时间(以纳秒为单位)。例如,634019142119225390。从中我们提取时间设置为 00:00:00 的日期,我们需要找到表示经过的无符号整数的经过时间自 1970 年 1 月 1 日 UTC 时间 00:00 UTC 以来的纳秒时间,从该日期的午夜开始。
解决方案应该针对任何给定的时间戳,而不是针对当前日期。
在上面的代码中,我们发现 mktime 函数需要大约 64 微秒才能完成,这是很多时间并且不是预期的
您是否有任何其他替代 mktime 函数的方法,它可以实现相同的结果,即返回自纪元以来经过的时间(以秒为单位),但时间更短。
【问题讨论】:
-
我不明白 - 您从 time_t 开始,将其放入 tm,然后使用 mktime 从您开始的信息中获取 time_t?为什么不直接使用您必须开始的
resulttime_t?
标签: c++ low-latency mktime