下面是我发现的一些代码:
std::cout << std::chrono::system_clock::now().time_since_epoch().count() << std::endl;
这为我打印1662563612364838407
;所以它看起来像是打印自UNIX时代(1970-01-01(以来的纳秒数。
但这种精度有保证吗?我在https://en.cppreference.com/w/cpp/chrono/system_clock该值将始终以纳秒为单位。这是否可能在另一个编译器、操作系统或硬件中返回微秒?
不,不能保证。您可以使用时钟period
成员别名来获得以秒为单位的刻度周期:
#include <chrono>
#include <iostream>
int main() {
std::cout << std::chrono::system_clock::period::num << " / " << std::chrono::system_clock::period::den;
}
可能输出:
1 / 1000000000
这是否可能在其他编译器、操作系统或硬件中返回微秒?
是的,但您始终可以将其std::chrono::duration_cast
转换为已知的持续时间单位。如果你想在几秒钟内完成,例如:
auto dur = std::chrono::duration_cast<std::chrono::seconds>(
std::chrono::system_clock::now().time_since_epoch());
std::cout << dur << 'n';
可能输出:
1662575635s
C++20之前:
std::cout << dur.count() << 'n';
1662575635
注意:保持在chrono
域内,直到绝对需要离开它(使用.count()
等(。