最高time_point到运行时定义的持续时间

时间:2019-02-08 11:39:30

标签: c++ chrono ceil

我将下一个整整五分钟设为上限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);

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

1 个答案:

答案 0 :(得分: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整除,则结果可能会违反直觉。