我正在使用一个属性example.hpp
库,该库具有自己的#include "cxxopts.hpp"
实现,可以简化为包含纳秒级时间的结构。
大概的例子如下:
c++11
我想从此自定义对象中获取Datetime
,但还要以纳秒为单位,类似于 struct custom_time_t {
unsigned year;
unsigned month;
unsigned day;
unsigned hour;
.......
long long nanoseconds;
}
。
使用epoch
和gettimeofday
通常将历元提高到几秒钟,但是如何也获得自std::chrono
以来的纳秒?
答案 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。我真的看不到自己存储年,月,...的值的意义。