在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's date/time library非常容易地做到这一点:
#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
,这是μs或100ns的1/10。
关于chrono::high_resolution_clock
:
该标准规定high_resolution_clock
可以是用于system_clock
或steady_clock
一个类型别名,或者它可以是一个独立的类型。在macOS和Windows上,high_resolution_clock
是steady_clock
的typedef。在海湾合作委员会high_resolution_clock
是system_clock
的typedef。所以你不能依赖high_resolution_clock
的类型或行为。我不推荐使用它。
关于chrono::steady_clock
:
steady_clock
就像一个秒表。定时需要多长时间是非常棒的。但它无法告诉你一天的时间。它与任何平台上的人体日历都没有任何关系。在macOS steady_clock
上,这是计算机启动后的一个纳秒计数。
有关当前不同std::chrono
钟的视频教程,请参阅https://www.youtube.com/watch?v=P32hvk8b13M
只有system_clock
计数时间,因为Unix epoch(事实上的标准,不是官方的)。有一个proposal under consideration,使这个官方,并添加这些额外的时钟:
utc_clock
:像system_clock
,但包括闰秒。
tai_clock
:自1958年1月1日00:00:00措施物理秒。每次出现闰秒时,提前一秒钟拨打utc_clock
。 全部分钟有60秒。
gps_clock
:像tai_clock
但计算从1980年1月00:00:00 UTC的第一个星期日的时间。
file_clock
:本建议成为所述时钟,在C++ 17的文件系统库基于。没有具体说明,但所有已知的实现都以某种方式与公民日历相关。
确实['gettimeofday'(https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man2/gettimeofday.2.html)无法正常工作? – dbush
由于目前在这个问题上有2个关闭的投票,我特此发布我的意图,如果投票结束,我打算重新打开这个问题。目前关闭的理由:不清楚被问到的是什么,对我来说并不正确。我很清楚被问到什么,而且我提供了一个答案。 –
@dbush,我没有使用该函数作为“sys /”文件系统的一部分,这在Windows中可能不可移植。此外,我想使用C++ 11工具。 – iammilind