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::cout
count()
类的成员函数
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::cout
count
是一个方法,而不是属性。