根据当前时间返回下一整秒

时间:2014-05-27 07:55:49

标签: c++ c++11 chrono

我正在尝试创建一个将返回下一整秒的函数,但是查看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()

2 个答案:

答案 0 :(得分:5)

您可以将持续时间转换为秒:

#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';
}

答案 1 :(得分:1)

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

time_t通常是“自纪元以来的秒数,所以它已经四舍五入到秒。

然后,您可以使用system_clock::from_time_tsystem_clock::time_point获取time_t个对象。

要确保to_time_t真正围绕向上,只需将舍入时间点与初始时间点进行比较。如果它小于该时间点,只需添加一秒。

此解决方案的唯一问题是time_t未严格定义为秒,因此解决方案可能无法移植。