Le 19/01/12 19:49, Matthew Jenks a écrit :
Hello,
I have been trying to find in the boost libraries if there
are any interoperability functions for Boost::Chrono and
Boost::Posix_Time? Does anyone know if they exist and what
class they are in?
Hi,
no, there aren't.
You can get them from
https://svn.boost.org/svn/boost/sandbox/conversion/boost/conversion/boost/chrono_time_point_to_posix_time_ptime.hpp
and
https://svn.boost.org/svn/boost/sandbox/conversion/boost/conversion/boost/chrono_duration_to_posix_time_duration.hpp.
Of course, you should extract the code from to be independent of the
proposed library TBoost.Conversion reviewed but without review
results yet.
template < typename Rep, typename Period> posix_time::time_duration operator()(chrono::duration<Rep, Period> const & from)
{
typedef chrono::duration<Rep, Period> src_duration_t;
typedef chrono::nanoseconds duration_t;
typedef duration_t::rep rep_t;
rep_t d = chrono::duration_cast<duration_t>(from).count();
rep_t sec = d/1000000000;
rep_t nsec = d%1000000000;
return posix_time::seconds(static_cast<long long>(sec))+
#ifdef BOOST_DATE_TIME_HAS_NANOSECONDS
posix_time::nanoseconds(nsec);
#else
posix_time::microseconds((nsec+500)/1000);
#endif
}
template < typename Duration>
posix_time::ptime operator()(const chrono::time_point<chrono::system_clock, Duration>& from)
{
typedef chrono::time_point<chrono::system_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 posix_time::from_time_t(0)+
posix_time::seconds(static_cast<long>(sec))+
#ifdef BOOST_DATE_TIME_HAS_NANOSECONDS
posix_time::nanoseconds(nsec);
#else
posix_time::microseconds((nsec+500)/1000);
#endif
}
HTH,
Vicente