如何转换std::chrono::monotonic_clock::now()
为毫秒并将其转换为长?
使用来自 chrono 的 stable_clock 或 high_resolution_clock 也是一样的。我已经看到了std::chrono::duration_cast<std::chrono::milliseconds>
,但我只想要当前的时间戳而不是任何持续时间间隔。
如何转换std::chrono::monotonic_clock::now()
为毫秒并将其转换为长?
使用来自 chrono 的 stable_clock 或 high_resolution_clock 也是一样的。我已经看到了std::chrono::duration_cast<std::chrono::milliseconds>
,但我只想要当前的时间戳而不是任何持续时间间隔。
当前时间戳是相对于某个时间点定义的(因此它是一个持续时间)。例如,“典型的”是获取关于纪元开始的时间戳(1970 年 1 月 1 日,在 Unix 中)。您可以通过使用来做到这一点time_since_epoch()
:
namespace chr = std::chrono;
chr::time_point<chr::steady_clock> tp = chr::steady_clock::now();
std::cout << "hours since epoch: "
<< chr::duration_cast<chr::hours>(tp.time_since_epoch()).count()
<< '\n';
要以毫秒为单位获取值,您需要将其转换为std::chrono::milliseconds
.
所有内置时钟都有一个相关的“纪元”,这是它们的基准时间。未指定纪元的实际日期/时间,并且可能因时钟而异。
如果您只想要一个数字进行比较,那么some-clock::now().time_since_epoch()
会给您一个duration
自该时钟的纪元以来的时间,您可以使用count()
该类型的成员将其转换为整数duration
。其单位将取决于period
时钟。如果您想要特定单位,duration_cast
请先使用:
typedef std::chrono::steady_clock clk;
unsigned long long milliseconds_since_epoch=
std::chrono::duration_cast<std::chrono::milliseconds>(
clk::now().time_since_epoch()).count();
正如我所说,这仅用于比较,而不是作为绝对时间戳,因为未指定时代。
如果您需要 UNIX 时间戳,则需要使用std::chrono::system_clock
,它具有to_time_t()
将 a 转换为time_point
a的功能time_t
。
或者,您可以在程序中的特定点获取基线计数,以及相应的时间gettimeofday
,然后使用它将相对计数转换为绝对时间。