我将下一个整整五分钟设为上限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);
我不知道如何在运行时设置分钟数。
答案 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);
R
。time_point
t
被截断为duration
m
(向零)。m
。如果24小时不能被m
整除,则结果可能会违反直觉。