2013-08-21 95 views
7

我正在使用steady_clock來保存某些消息的時間戳。爲了調試的目的是有用的有日曆(或類似的東西)。將steady_clock :: time_point轉換爲time_t

對於其他時鐘,它的靜態功能to_time_t,但在GCC(MinGW 4.8.0)上不存在此功能。

現在我打印出類似這樣:

Timestamp: 26735259098242 

對於timestamp我需要一個steady_clock,所以我不能用system_clock或他人。

編輯 之前的打印從time_since_epoch().count()

+0

'steady_clock :: now()。'time_since_epoch()'爲'0.12毫秒'的'time_t'值是什麼?定義轉換,你會得到你的答案。 – Cubbi

+1

'(to | from)_time_t'僅對系統時鐘有意義。例如'high_resolution_clock'可能無法支持整個'time_t'的範圍。 – kennytm

+0

自從您重新啓動計算機後,它已經過了大約7小時42分鐘嗎? –

回答

11

給出假設你需要內部計算的穩定行爲,而不是顯示,這裏是你可以用它來轉換爲time_t的功能顯示。

using std::chrono::steady_clock; 
using std::chrono::system_clock; 

time_t steady_clock_to_time_t(steady_clock::time_point t) 
{ 
    return system_clock::to_time_t(system_clock::now() 
              + (t - steady_clock::now())) 
} 

如果你需要記錄穩定的行爲,你想爲在啓動一個(system_clock::now(), steady_clock::now())對,永遠使用它。

+0

由於時鐘對齊ntp等,system_clock的頻率實際上可能會偏離s​​teady_clock的頻率。因此,「在那之後永遠使用它」可能不是一個好主意。否則有人可能會手動更改時鐘。 – sstn

+3

@sstn:頻率差異由計時器操作員定義來處理。如果你想要一個穩定的時鐘,你必須使用一個基礎。結合手動或ntp更新使時鐘不穩定,甚至可能是單調的。 –

+0

如果需要在不同系統之間關聯日誌,那麼steady_clock_to_time_t也是人們想要的,因此日誌會在應用程序啓動後合併時間調整。 –