在 macOS 上,您可以通过以下方式获取自 1970-01-01 UTC 以来的微秒(不包括闰秒):
#include <chrono>
#include <iostream>
int
main()
{
std::cout << std::chrono::system_clock::now().time_since_epoch().count() << "us\n";
}
这只是我的输出:
1503715928742714us
这不太便携。虽然各个平台的system_clock
s 确实测量自 1970-01-01 UTC 以来的时间(未指定,但事实上的标准),它们以不同的精度进行测量。只有 macOS 使用微秒。要便携式输出微秒:
using namespace std::chrono;
std::cout << time_point_cast<microseconds>(system_clock::now()).time_since_epoch().count() << "us\n";
如果您想在执行此操作的同时探索其他平台这次测量的精度,您可以使用Howard Hinnant 的日期/时间库 https://howardhinnant.github.io/date/date.html非常容易地做到这一点:
#include "date.h"
#include <chrono>
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
std::cout << system_clock::now().time_since_epoch() << '\n';
}
对我来说这只是输出:
1503716308206361µs
在 gcc 平台上,单位为ns
。在 Windows 上,单位是[1/10000000]s
,即 1/10 µs 或 100ns。
About chrono::high_resolution_clock
:
该标准规定high_resolution_clock
可能是类型别名system_clock
or steady_clock
,或者它可能是一个单独的类型。在 macOS 和 Windows 上,high_resolution_clock
是一个类型定义steady_clock
。关于海湾合作委员会high_resolution_clock
是一个类型定义system_clock
。所以你不能依赖于类型或行为high_resolution_clock
。我不推荐它的使用。
About chrono::steady_clock
:
steady_clock
就像秒表一样。它对于计时某件事需要多长时间非常有用。但它无法告诉您一天中的时间。它与任何平台上的人类日历都没有任何关系。在 macOS 上steady_clock
它是自计算机启动以来的纳秒计数。
有关当前不同的视频教程std::chrono
时钟,请参阅https://www.youtube.com/watch?v=P32hvk8b13M https://www.youtube.com/watch?v=P32hvk8b13M
Only system_clock
计算时间自Unix时代 http://en.wikipedia.org/wiki/Unix_time(事实上的标准,非官方)。有一个正在考虑的提案 https://wg21.link/p0355为了使其正式化,并添加这些额外的时钟:
utc_clock https://wg21.link/p0355#time.clock.utc: Like system_clock
但包括闰秒。
tai_clock https://wg21.link/p0355#time.clock.tai:测量自 1958-01-01 00:00:00 以来的物理秒数。提前一秒utc_clock
每次都有闰秒。All分钟有 60 秒。
gps_clock https://wg21.link/p0355#time.clock.gps: Like tai_clock
但测量自 1980 年 1 月第一个星期日 00:00:00 UTC 以来的时间。
file_clock https://wg21.link/p0355#time.clock.file:建议将其作为 C++17 文件系统库所基于的时钟。它没有被指定,但所有已知的实现都以某种方式将其与民用日历相关联。