gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:31:00 28 4
gpt4 key购买 nike

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

到目前为止,通过其他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;

使用此方法,我可以获得当前日期和时间的搜索结果,但这不是我所需要的。出于演示目的,假设将来的日期是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';

输出:
1593561600s, 0ns

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

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

如果您不想使用此第三方 header ,请使用 here is the algorithm to convert a {y, m, d} triple into a count of days,因为 Unix epoch是。实际上, sys_days{July/1/2020}所做的所有事情都是在幕后调用 days_from_civil 并将其放入基于 chrono::time_point的天精度 system_clock中。从那时起,C++ 11/14版本的 <chrono>完成了所有工作。

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

关于c++ - 如何找到两个日期之间以秒和纳秒为单位的时间差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62289756/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com