C++ 上限时间\指向运行时定义的持续时间
我的上限时间指向下一个完整的五分钟,这很容易:C++ 上限时间\指向运行时定义的持续时间,c++,chrono,ceil,C++,Chrono,Ceil,我的上限时间指向下一个完整的五分钟,这很容易: 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 =
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);
模板
使用分钟=std::chrono::duration;
const auto now=std::chrono::system_clock::now();
const auto begin=ceil(现在);
我不知道如何设置运行时的分钟数。这里有一个
ceil
函数,它将取任何时间点
,并将其四舍五入到下一个持续时间m
,同时给出持续时间{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;
}
R
时间点
t
被截断为持续时间
m
(接近零)m
如果24小时不能被
m
平均整除,结果可能会违反直觉。这里有一个ceil
函数,它将占用任何时间点
,并将其四舍五入到下一个持续时间m
,同时给出持续时间{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;
}
R
时间点
t
被截断为持续时间
m
(接近零)m
如果24小时不能被
m
平均整除,结果可能会违反直觉。std::chrono::minutes(X)
?你必须自己做算术。没有chrono提供的API来执行此操作。您希望得到的时间点的精度是多少?我可以看到三个合理的答案:1)输入时间点
(本例中为系统时钟::持续时间
)的精度。2) 输入<代码>持续时间
(本例中为<代码>分钟)的精度。3) 1)和2)的common_type
(system_clock::duration
在本例中)。我只需要跳到下一轮5分钟,没有秒,毫秒。。。我需要时间点,单位为小时x->x:00,x:05,x:10,…,x:55我的例子做我想做的,但这是编译时解决方案,例如,上限为10或1,我需要重新编译它。std::chrono::minutes(x)
?你必须自己做算术。没有chrono提供的API来执行此操作。您希望得到的时间点的精度是多少?我可以看到三个合理的答案:1)输入时间点
(本例中为系统时钟::持续时间
)的精度。2) 输入<代码>持续时间
(本例中为<代码>分钟)的精度。3) 1)和2)的common_type
(system_clock::duration
在本例中)。我只需要跳到下一轮5分钟,没有秒,毫秒。。。我需要以小时x->x:00,x:05,x:10,…,x:55为单位的时间点,我的示例做我想要的,但这是编译时解决方案,例如,上限为10或1,我需要重新编译它。