C++ 如何将毫秒添加到自历元以来的持续时间?
仅使用C++ 如何将毫秒添加到自历元以来的持续时间?,c++,time,chrono,C++,Time,Chrono,仅使用std::chrono库,我有一个类型为unsigned long的变量,表示从1970年1月1日到现在的毫秒数,我想向它添加100毫秒 unsigned long now = std::chrono::system_clock::now().time_since_epoch().count(); unsigned long t100ms = std::chrono::milliseconds(100).count(); unsigned long time = now + t100ms;
std::chrono
库,我有一个类型为unsigned long
的变量,表示从1970年1月1日到现在的毫秒数,我想向它添加100毫秒
unsigned long now = std::chrono::system_clock::now().time_since_epoch().count();
unsigned long t100ms = std::chrono::milliseconds(100).count();
unsigned long time = now + t100ms;
当打印t100ms
时,我得到“1000
”
如果我每隔秒打印std::chrono::system_clock::now
的值,我会看到每次迭代时递增的数字不会增加到1000(因为1秒等于1000毫秒,应该是这样)
问题:
std::chrono::system\u clock::now().time\u since\u epoch()
是否返回自1970年1月1日以来经过的时间量(以毫秒为单位)?std::chrono::system\u clock::now().time\u since\u epoch()是自epoch以来经过的时间,以系统时钟选择使用的任何单位表示;这可能是几秒钟,几年,或者介于两者之间的任何时间。很明显,将毫秒数加上纳秒数(例如)是毫无意义的
如果要对持续时间值执行算术运算,则应保留在持续时间类型中,因为它们将为您执行单位转换,并且仅在要打印结果时调用count()
:
auto now = std::chrono::system_clock::now().time_since_epoch();
auto t100ms = std::chrono::milliseconds(100);
auto time = now + t100ms;
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(time).count();
auto now=std::chrono::system_clock::now().time_since_epoch();
自动t100ms=std::chrono::毫秒(100);
自动时间=现在+100毫秒;
std::coutcount()
类的成员函数duration
返回句点中的表示形式,它是内部的。
它不必是秒或毫秒,它只是一个内部表示。您可以为duration
类手动设置时段,该类由time\u since\u epoch()
函数返回
std::chrono::milliseconds foo = std::chrono::system_clock::now().time_since_epoch();
现在您有了duration
类的周期值是毫秒。时间的开始
std::chrono::time\u point::time\u since\u epoch
不必返回1970年1月1日起的时间,而是时钟的epoch由实现定义。Epoch仅表示在应用程序会话中保持不变的固定时间点
例如,在我的系统上std::chrono::time\u point::time\u after\u epoch
返回自最近一次系统启动以来的时间
单位
std::chrono
库中的日期和时间实用程序设计用于处理无单位时间量。这是为了,例如,启用以小时和纳秒为不同单位添加两个持续时间。单位转换将自动执行
如果要用特定单位表示时间量,请使用std::chrono::duration\u cast
。另外,要获取时间量表示为数字,请使用std::chrono::duration::count
using namespace std::literals; // To enable duration literals as, e.g., 100ms.
auto time = std::chrono::steady_clock::now().time_since_epoch() + 100ms;
std::cout << "Ms: " << std::chrono::duration_cast<decltype(1ms)>(time).count();
使用命名空间std::literals;//启用持续时间文字,例如100ms。
自动时间=std::chrono::稳定时钟::现在();
std::coutcount
是一个方法,而不是属性。