time_point steady_clock example c++ datetime boost c++11 chrono

c++ - steady_clock - Interoperabilidad entre boost:: date_time y std:: chrono



std:: chrono:: steady_clock (2)

¿Qué tan interoperables son boost :: date_time y std :: chrono?

Por ejemplo, ¿hay alguna manera de convertir entre boost :: posix_time :: ptime y std :: chrono :: time_point?

Intenté buscar documentación sobre tales conversiones pero no pude encontrar ninguna.


Encontré esto en la lista de correo de boost commits: http://lists.boost.org/boost-commit/2009/04/15209.php

Aquí están las funciones relevantes:

template < class Clock, class Duration> struct convert_to<posix_time::ptime, chrono::time_point<Clock, Duration> > { inline static posix_time::ptime apply(const chrono::time_point<Clock, Duration>& from) { typedef chrono::time_point<Clock, Duration> time_point_t; typedef chrono::nanoseconds duration_t; typedef duration_t::rep rep_t; rep_t d = chrono::duration_cast<duration_t>(from.time_since_epoch()).count(); rep_t sec = d/1000000000; rep_t nsec = d%1000000000; return boost::posix_time::from_time_t(0)+ boost::posix_time::seconds(static_cast<long>(sec))+ #ifdef BOOST_DATE_TIME_HAS_NANOSECONDS boost::posix_time::nanoseconds(nsec); #else boost::posix_time::microseconds((nsec+500)/1000); #endif } }; template < class Clock, class Duration> struct convert_to<chrono::time_point<Clock, Duration>, posix_time::ptime> { inline static chrono::time_point<Clock, Duration> apply(const posix_time::ptime& from) { boost::posix_time::time_duration const time_since_epoch=from-boost::posix_time::from_time_t(0); chrono::time_point<Clock, Duration> t=chrono::system_clock::from_time_t(time_since_epoch.total_seconds()); long nsec=time_since_epoch.fractional_seconds()*(1000000000/time_since_epoch.ticks_per_second()); return t+chrono::nanoseconds(nsec); } };

No estoy seguro de cuándo se convertirán en parte de un lanzamiento de refuerzo. No parecen estar en el maletero de refuerzo en este momento ...


Puede convertir un time_t en y desde un std :: chrono :: system_clock :: time_point:

class system_clock { public: ... static time_t to_time_t (const time_point& __t); static time_point from_time_t(time_t __t); };

Y puedes convertir un time_t a un ptime:

ptime from_time_t(time_t t);

Sin embargo, no veo una forma de convertir un ptime en time_t.