gpt4 book ai didi

c++ - 上限 time_point 到运行时定义的持续时间

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:10 30 4
gpt4 key购买 nike

我将 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);

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

最佳答案

这里是一个 ceil 函数,它将采用任何 time_point 并将其四舍五入到下一个 Duration 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;
}

它可以像这样使用:

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 整除,结果可能有悖常理。

关于c++ - 上限 time_point 到运行时定义的持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54591636/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com