我有一个用户提供的持续时间
const int period_seconds = cfg.period_seconds;
我想floor
一个time_point
到那个duration
的粒度。
我看到 time_point
有一个 std::chrono::floor
函数和 duration
,但如何使用它们来完成我正在寻找的事情并不是很明显。
我有以下有效的玩具示例:
const auto seconds = std::chrono::seconds{period_seconds};
const auto period = std::chrono::duration_cast<std::chrono::nanoseconds>(seconds);
const auto now = std::chrono::system_clock::now();
const auto floored = now - (now.time_since_epoch() % period);
上述代码的净效果,对于 10 秒的持续时间如下:
now: 2022-04-19 15:06:26.781772408 floored: 2022-04-19 15:06:20.000000000 # so "floors" the 25.78 seconds to 20 seconds
我忍不住觉得根据 time_since_epoch
和模数运算符来工作并不是获得我正在寻找的结果的“正确”方式...
是否有“更好”/推荐的方法将 time_point 设置为某个用户提供的持续时间?
最佳答案
我觉得你的解决方案非常好。然而,它可以稍微简化。无需形成纳秒级精度 period
。可以直接用seconds
操作:
const auto floored = now - (now.time_since_epoch() % seconds);
关于c++ - 将 time_point 降低到给定持续时间的推荐方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71927290/