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

C++ 如何找出两个日期之间以秒和纳秒为单位的时间差?,c++,datetime,time,chrono,C++,Datetime,Time,Chrono,我需要计算Unix纪元00:00:00 1970年1月1日UTC和用户将选择的未来某个日期之间的秒和纳秒 以下是我通过其他堆栈溢出问题的答案找到的: // 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>(

我需要计算Unix纪元00:00:00 1970年1月1日UTC和用户将选择的未来某个日期之间的秒和纳秒

以下是我通过其他堆栈溢出问题的答案找到的:

// 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;

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

在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';
如今,要找到一个能够做到这一点的C++20std::lib将是很困难的。不过

只需添加include date/date.h并使用名称空间date;,它是有效的

如果您不想使用此第三方标头,因为。事实上,所有sys_days{July/1/2020}都是在引擎盖下调用,并根据系统时钟将其放入days precision chrono::time_点。从那时起,C++11/14版本的将完成所有工作


上述计算都不依赖于计算机的本地时区设置。

在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';
如今,要找到一个能够做到这一点的C++20std::lib将是很困难的。不过

只需添加include date/date.h并使用名称空间date;,它是有效的

如果您不想使用此第三方标头,因为。事实上,所有sys_days{July/1/2020}都是在引擎盖下调用,并根据系统时钟将其放入days precision chrono::time_点。从那时起,C++11/14版本的将完成所有工作

上述计算均不依赖于计算机的本地时区设置。

now_sec.count*100000000不要这样做-使用持续时间,然后执行subtraciton.auto nano_secs=now_ns-now_sec;在我看来,完全没有持续时间施法是合理的。现在,秒数*100000000不要这样做-使用持续时间施法,然后再执行subtraciton.auto nano秒=现在,现在,秒;在我看来,这很合理,根本没有持续时间。