c++ - 纳秒分辨率到纳秒纪元的日历时间

标签 c++ datetime c++11 epoch

我正在使用属性 c++11 库,它有自己的 Datetime 实现,它们的实现可以简化为包含时间部分的结构高达纳秒。 一个粗略的例子如下:

    struct custom_time_t {
       unsigned year;
       unsigned month;
       unsigned day;
       unsigned hour;
       .......
       long long nanoseconds;
    }

我想从这个自定义对象中获取 epoch,但也以纳秒级分辨率 - 类似于 gettimeofday

通常使用 std::chronostd::tm 将纪元提高到秒,但如何获得自 纪元 以来的纳秒还有吗?

最佳答案

最简单的方法是使用这个 preview of the C++20 <chrono> library .

#include "date/date.h"
#include <chrono>

std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds>
to_time_point(custom_time_t const& t)
{
    using namespace date;
    using namespace std::chrono;
    return sys_days{year(t.year)/t.month/t.day} + hours(t.hour) + ...
             + nanoseconds{t.nanoseconds};
}

返回类型对于 system_clock 具有正确的值基础time_point .如果您使用 .time_since_epoch().count() 从中提取值, 你会得到 nanoseconds 的数字自(或之前)1970-01-01 00:00:00.000000000 UTC。

也可以使用 auto作为 C++14 中的返回类型,但我想弄清楚返回类型是什么。此返回类型还有一个类型别名:sys_time<nanoseconds> .

关于c++ - 纳秒分辨率到纳秒纪元的日历时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57069030/

相关文章:

python - 日期时间.strptime (‘2017-01-12T14:12:06.000-0500’ ,'%Y-%m-%dT%H:%M:%S.%f%Z' )

c++ - 只有 "void"是不可引用类型吗?

c++ - 为什么当我使用头文件和与类同名的 cpp 文件创建类时,类会出错

c++ - 从地址查找堆或堆 block 或段

c++ - OpenCv/C++ - 轻松从具有大数据库的图片中找到相似之处

php - 获取当前的 ISO8601 日期/时间戳

c++ - malloc 的奇怪问题

python - 按时间过滤sqlalchemy sqlite datetime列

c++ - 以随机大小初始化 std::array

c++ - 如何将 CMake 中的 QtMain 与 Qt5 链接?