C++ 基于当前时间返回下一整秒
我正在尝试创建一个将在下一整秒钟返回的函数,但是通过查看c++11C++ 基于当前时间返回下一整秒,c++,c++11,chrono,C++,C++11,Chrono,我正在尝试创建一个将在下一整秒钟返回的函数,但是通过查看c++11std::chrono文档,我找不到任何明显的方法来实现这一点 示例:如果当前时间为09:50:01.1234我希望函数返回09:50:02.0000(即下一整秒) 如果可能,使用std::chrono? 我想实现的目标是尽可能每一秒都执行一个特定的动作。因此,我将使用结果睡眠一段时间,持续时间为return\u next\u full\u second()-system\u clock::now()您可以使用静态system\u
std::chrono
文档,我找不到任何明显的方法来实现这一点
示例:如果当前时间为09:50:01.1234
我希望函数返回09:50:02.0000
(即下一整秒)
如果可能,使用std::chrono
?
我想实现的目标是尽可能每一秒都执行一个特定的动作。因此,我将使用结果睡眠一段时间,持续时间为
return\u next\u full\u second()-system\u clock::now()
您可以使用静态system\u clock::to\u time\t
方法获得一个time\t
对象
时间\u t
通常是“自历元起的秒数”,因此它已经四舍五入为秒
然后可以使用system\u clock::from\u time\t
从time\t
获取system\u clock::time\u point
对象
要确保到\u time\t
真的四舍五入,只需将四舍五入的时间点与初始时间点进行比较。如果它小于该时间点,只需添加一秒
此解决方案的唯一问题是,
时间\u t
没有严格定义为秒,因此解决方案可能不可移植。您可以将持续时间强制转换为秒:
#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';
}
#包括
#包括
标准::时钟::系统时钟::时间点返回下一个完整秒()
{
使用名称空间std::chrono;
系统时钟::时间点现在=系统时钟::现在();
自动s=持续时间(现在。时间(从新纪元开始)();
返回系统时钟::时间点(++s);
}
int main(){
使用名称空间std::chrono;
自动t=返回下一个完整秒();
自动d=持续时间(t.时间(自)开始);
谢谢。我真的希望有一个可移植的解决方案,但如果不存在,我会使用这种方法。我不会从t-epoch获得ms中的最后一个强制转换。你想解释一下吗?@MarcoA。看看结果能保持几秒钟(最后3个零)明白了,谢谢。这是一个更好的解决方案,我可以编辑一下吗?还有一个语法typo@MarcoA.ctime表示自历元(因此回滚)以来经过的秒数。以下是一些有用的持续时间计时取整函数,可用于解决此问题:
#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';
}