2013-08-21 59 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也是人们想要的,因此日志会在应用程序启动后合并时间调整。 –