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,我需要重新编译它。