2013-08-21 3 views
7

Я использую steady_clock для сохранения временной метки некоторых сообщений. Для цели отладки полезно иметь календарь (или что-то подобное).Преобразование stable_clock :: time_point to time_t

Для других часов это статическая функция to_time_t, но на GCC (MinGW 4.8.0) эту функцию нет.

Теперь я напечатать что-то вроде:

Timestamp: 26735259098242 

Для метки времени я нужен steady_clock, так что я не могу использовать system_clock или другие.

Edit Предыдущая печать даются от time_since_epoch().count()

+0

Какое значение будет иметь значение 'time_t'' constant_clock :: now(). Time_since_epoch() 'из 0,12 миллисекунды? Определите конверсию, и вы получите ответ. – 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

Частота system_clock может фактически отклоняться от частоты stable_clock из-за выравнивания часов по ntp и т. Д. Следовательно, «и использовать это навсегда после» может быть не очень хорошая идея. Или иначе кто-то может просто изменить часы вручную. – sstn

+3

@sstn: различия в частоте соблюдаются определениями оператора хроно. И вам нужно использовать только одну основу, если вы хотите постоянные часы. Включение обновлений вручную или ntp делает часы неустойчивыми, потенциально даже монотонными. –

+0

Если нужно связать журналы между различными системами, то stable_clock_to_time_t также требуется, чтобы журнал включал корректировки времени после запуска приложения. –

Смежные вопросы