2015-04-22 92 views
23

std::chrono::time_point::time_since_epoch()返回duration,過去提到time_point。什麼時候是這樣的time_point?它依賴於C++實現還是由C++標準定義?或者這是將時代設定爲1970年1月1日UTC的事實標準?什麼時候是std :: chrono epoch?

+2

'epoch'一般代表時鐘的起點。 'C++ 11 chrono'中有多個時鐘。 – bolov

+0

http://en.cppreference.com/w/cpp/chrono/time_point/time_since_epoch – SChepurin

+1

本文解釋了這一點:http://www.informit.com/articles/article.aspx?p=1881386&seqNum=2 – newbie

回答

31

它是具體的clocktime_point指的功能,以及執行那clock。本標準規定了三個不同的時鐘:

  • system_clock
  • steady_clock
  • high_resolution_clock

,標準不指定任何這些時鐘的時代。程序員(你)也可以創建他們自己的時鐘,這可能會或可能不會指定一個時代。

std::chrono::system_clock::time_point有一個與Unix Time一致的歷元(非官方)標準。這被定義爲從00:00:00世界標準時間(UTC)1970年1月1日星期四開始經過的時間,不包括閏秒。

Fwiw,here is a date/time library它利用這個事實上的標準。

其他兩個std指定時鐘沒有事實上的標準。另外high_resolution_clock被允許爲system_clocksteady_clock的類型別名。

在OS X上,high_resolution_clocksteady_clock的類型別名,而steady_clock是計算機啓動後的納秒數(與UTC沒有任何關係)。

+1

未來讀者:你有一份官方文件鏈接清單,你可以檢查這些文件是否屬實? – MikeMB

+1

以下是所有的C++論文:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/其中包括C++標準草案,其中包含「官方規範」 。官方的C++ 14規範是http://www.open-std.org/jtc1/sc22/wg21/prot/14882fdis/n4141.pdf,但它不是免費的。然而http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf是接下來的草案,應該足夠接近。目前的C++ 17草案是http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4618.pdf –

+0

非常感謝,我應該更加精確:我意味着如果有任何有關'std :: chrono :: system_clock'的不同標準庫實現的實際行爲的文檔。這將避免編寫特定於平臺的單元測試來驗證該行爲的必要性。 – MikeMB

相關問題