std :: chrono计算不同比例的差异

时间:2016-07-25 17:21:51

标签: c++

我的标题可能不是很有帮助,我有一个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();
}

如何计算实际增加的分辨率(例如,没有实际秒数的纳秒数)?

2 个答案:

答案 0 :(得分:3)

您可以使用std::duration_caststd::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;

在没有秒的情况下保留纳秒分辨率。