在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