根据当前时间返回下一秒

Return next full second based on current time

本文关键字:返回 下一秒 时间      更新时间:2023-10-16

我试图创建一个函数,将返回下一个完整的秒,但通过c++11 std::chrono文档我找不到任何明显的方法来完成。

示例:如果当前时间是09:50:01.1234,我希望函数返回09:50:02.0000(即下一个完整秒)。

std::chrono::system_clock::time_point return_next_full_second()
{
    using namespace std::chrono;
    system_clock::time_point now = system_clock::now();
    system_clock::time_point next_full_second = // How? 
    return next_full_second;
}

关于如何实现这一点,如果可能的话,使用std::chrono有什么提示吗?

我想要达到的目标是执行一个特定的动作,尽可能接近每一秒。所以我将使用结果来睡眠return_next_full_second() - system_clock::now()的持续时间。

你可以将持续时间设置为秒:

#include <chrono>
#include <iostream>
std::chrono::system_clock::time_point return_next_full_second()
{
    using namespace std::chrono;
    system_clock::time_point now = system_clock::now();
    auto s = duration_cast<seconds>(now.time_since_epoch());
    return system_clock::time_point(++s);
}
int main() {
    using namespace std::chrono;
    auto t = return_next_full_second();
    auto d = duration_cast<milliseconds>(t.time_since_epoch());
    std::cout <<  d.count() << 'n';
}

您可以使用静态system_clock::to_time_t方法获得time_t对象。

time_t通常是"seconds since epoch ",所以它已经四舍五入到seconds。

那么你可以使用system_clock::from_time_ttime_t获得一个system_clock::time_point对象。

要确保to_time_t真的将向上舍入,只需将舍入的时间点与初始时间点进行比较。

此解决方案的唯一问题是time_t没有严格定义为以秒为单位,因此该解决方案可能不具有可移植性。