如何找到两个日期之间以秒和纳秒为单位的时间差异?

How to find difference in time in seconds and nanoseconds between two dates?

我需要计算 Unix 纪元(00:00:00 1970 年 1 月 1 日 UTC)与用户将要 select.

的某个日期之间的秒数和纳秒数

这是我目前通过其他 Stack Overflow 答案找到的内容:

// seconds and nanoseconds past epoch
auto now = std::chrono::system_clock::now().time_since_epoch();
auto now_ns = std::chrono::duration_cast<std::chrono::nanoseconds>(now);
auto now_sec = std::chrono::duration_cast<std::chrono::seconds>(now);

// output total ns since epoch
qDebug() << now_ns.count() << "ns";
// output total secs since epoch
qDebug() << now_sec.count() << "secs";

auto nano_secs = now_ns.count() - (now_sec.count() * 1000000000);
// output ns minus whole seconds
qDebug() << "nano_secs = " << nano_secs;

使用它,我可以获得我正在寻找的当前日期和时间的结果,但这不是我需要的。出于演示目的,假设未来日期是 00:00:00 2020 年 7 月 1 日 UTC。我该如何计算?

在 C++20 中,这看起来像:

using namespace std::chrono;
nanoseconds now_ns = sys_days{July/1/2020}.time_since_epoch();
auto now_sec = duration_cast<seconds>(now_ns);
now_ns -= now_sec;
std::cout << now_sec << ", " << now_ns << '\n';

输出:

1593561600s, 0ns

今天要找到可以做到这一点的 C++20 std::lib 会很困难。然而 here is a free, open-source preview of C++20 <chrono>.

只需添加 #include "date/date.h"using namespace date;,就可以了。

如果你不想使用这个第 3 方 header,here is the algorithm to convert a {y, m, d} triple into a count of days since the Unix epoch. Indeed, all sys_days{July/1/2020} does is call days_from_civil 并把它放入一个基于 [=19 的 days-precision chrono::time_point =].从那时起,C++11/14 版本的 <chrono> 完成了所有工作。

None 以上计算取决于您计算机的本地时区设置。