如何将毫秒添加到纪元以来的持续时间?
How to add milliseconds to the time duration since epoch?
仅使用 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_clock::now().time_since_epoch()
不是 return 自 1970 年 1 月 1 日以来经过的时间量(以毫秒表示)吗?
std::chrono::system_clock::now().time_since_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();
count()
duration
class returns 表示的成员函数 periods,是内部的。
不一定是秒或毫秒,它只是一种内部表示。您可以手动设置 duration
class 的周期,由 time_since_epoch()
函数返回。
std::chrono::milliseconds foo = std::chrono::system_clock::now().time_since_epoch();
现在 duration
class 的周期值为毫秒。
时间的开始
std::chrono::time_point::time_since_epoch
不是 return 从 1970 年 1 月 1 日开始的时间,而不是时钟的 纪元 实施定义。 Epoch 仅表示在应用程序会话中保持不变的固定时间点。
例如,在我的系统上std::chrono::time_point::time_since_epoch
return自上次系统启动以来的时间。
单位
std::chrono
库中的日期和时间实用程序旨在使用 无单位 时间量。这是为了,例如,能够添加两个具有不同单位(小时和纳秒)的持续时间。单位转换是自动执行的。
如果要用特定单位表示时间量,请使用std::chrono::duration_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::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_clock::now().time_since_epoch()
不是 return 自 1970 年 1 月 1 日以来经过的时间量(以毫秒表示)吗?
std::chrono::system_clock::now().time_since_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();
count()
duration
class returns 表示的成员函数 periods,是内部的。
不一定是秒或毫秒,它只是一种内部表示。您可以手动设置 duration
class 的周期,由 time_since_epoch()
函数返回。
std::chrono::milliseconds foo = std::chrono::system_clock::now().time_since_epoch();
现在 duration
class 的周期值为毫秒。
时间的开始
std::chrono::time_point::time_since_epoch
不是 return 从 1970 年 1 月 1 日开始的时间,而不是时钟的 纪元 实施定义。 Epoch 仅表示在应用程序会话中保持不变的固定时间点。
例如,在我的系统上std::chrono::time_point::time_since_epoch
return自上次系统启动以来的时间。
单位
std::chrono
库中的日期和时间实用程序旨在使用 无单位 时间量。这是为了,例如,能够添加两个具有不同单位(小时和纳秒)的持续时间。单位转换是自动执行的。
如果要用特定单位表示时间量,请使用std::chrono::duration_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();