我的标题可能不是很有帮助,我有一个std :: chrono :: nanosecond,但我被要求序列化并提供第二个,然后将纳秒作为JSON中的不同值。
所以尽管我的结构仍然存在:
struct time
{
...
std::chrono::nanoseconds timepoint;
};
当被问到几秒钟时,我做了
uint32_t sec() const
{
return std::chrono::duration_cast<std::chrono::seconds>(timepoint_).count();
}
但是当被问到纳秒时,我希望分辨率以纳秒为单位,但没有秒数(只有最不重要的值?)但是,以纳秒为单位的投射会返回秒数和更高的分辨率。
uint64_t nanosec() const
{
return std::chrono::duration_cast<std::chrono::nanoseconds>(timepoint_).count();
}
如何计算实际增加的分辨率(例如,没有实际秒数的纳秒数)?
答案 0 :(得分:3)
您可以使用std::duration_cast
至std::seconds
检索秒数,使用模运算符检索纳秒数:
template <typename T>
std::pair<T, T> split (std::chrono::duration<T, std::nano> const& duration) {
using seconds = std::chrono::duration<T>;
return {std::chrono::duration_cast<seconds>(duration).count(),
(duration % seconds{1}).count()};
}
在this page上有一个很好的例子,显示在std::chrono::duration
上使用算术运算符来实现你想要的。
答案 1 :(得分:1)
用户@Xarn提供了解决方案:
using Microsoft.Extensions.DependencyInjection;
在没有秒的情况下保留纳秒分辨率。