天花板time_point到运行时定义的持续时间

问题描述 投票:1回答:1

我吊顶time_point旁边足足五分钟,这是很容易的:

template <int N>
    using minutes = std::chrono::duration<int, std::ratio_multiply<std::ratio<N>, std::chrono::minutes::period>>;

const auto now = std::chrono::system_clock::now();
const auto begin = ceil<minutes<5>>(now);

我不知道如何设置的分钟数在运行时。

c++ chrono ceil
1个回答
0
投票

这里是一个将采取任何ceil,圆其到下一个time_point,同时给予结果Duration m的精度Duration{1}功能:

template <class Clock, class Duration1, class Duration2>
constexpr
auto
ceil(std::chrono::time_point<Clock, Duration1> t, Duration2 m) noexcept
{
    using R = std::chrono::time_point<Clock, Duration2>;
    auto r = std::chrono::time_point_cast<Duration2>(R{} + (t - R{})/m*m);
    if (r < t)
        r += m;
    return r;
}

它可以使用,如:

const auto begin = ceil(system_clock::now(), 5min);
const auto begin = ceil(system_clock::now(), 10min);
const auto begin = ceil(system_clock::now(), 10ms);
  1. 首先,返回类型被计算并给出别名R
  2. 然后time_point t被截断为duration m(朝向零)。
  3. 如果截断的结果小于输入,结果四舍五入到下一个m

如果24小时不m整除,结果可能是违反直觉的。

© www.soinside.com 2019 - 2024. All rights reserved.