日历时间(以纳秒为单位)至纳秒级

时间:2019-07-17 05:29:11

标签: c++ datetime c++11 epoch

我正在使用一个属性example.hpp库,该库具有自己的#include "cxxopts.hpp"实现,可以简化为包含纳秒级时间的结构。 大概的例子如下:

c++11

我想从此自定义对象中获取Datetime,但还要以纳秒为单位,类似于 struct custom_time_t { unsigned year; unsigned month; unsigned day; unsigned hour; ....... long long nanoseconds; }

使用epochgettimeofday通常将历元提高到几秒钟,但是如何也获得自std::chrono以来的纳秒?

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用此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的{​​{1}},返回类型具有正确的值。如果您使用time_point从中提取值,则自1970-01-01 00:00:00.000000000 UTC以来(或之前),您将获得.time_since_epoch().count()的数量。

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

答案 1 :(得分:0)

我会坚持使用std::chrono并将duration转换为std::chrono::nanoseconds

#include <iostream>
#include <chrono>

int main() {
    const auto p0 = std::chrono::time_point<std::chrono::system_clock>{};
    const auto end = std::chrono::system_clock::now();
    const auto diff = end - p0;
    const auto diff_ns = std::chrono::duration_cast< std::chrono::nanoseconds >( diff );
    const auto diff_h = std::chrono::duration_cast< std::chrono::hours >( diff );
    std::cout  << diff_h.count() << "h "  << diff.count() << " s " << diff_ns.count() << "ns\n";
}

Ps。我真的看不到自己存储年,月,...的值的意义。