Does anyone know if there is a good way to turn a boost::posix_time::ptime
into an __int64
value. (I have compiled the microsecond version, not th
This is easy to do using the C++0x chrono classes, which are based on a simplified version of Boost's time/date library, but looking at the Boost docs I don't see anything particularly obvious. In fact the only method of doing this I can see is to call to_tm
to convert it to a standard C struct tm
and then multiply the fields together. This is kind of nasty, but should work (though you'll want to be careful about leap seconds and suchlike).
#include <boost/date_time/posix_time/posix_time.hpp>
// ...
uint64_t secondsSinceEpoch(const boost::posix_time::ptime& time) {
namespace bpt = boost::posix_time;
const bpt::ptime epoch = bpt::from_time_t(0);
bpt::time_duration duration = time - epoch;
return duration.total_seconds();
}
// ...
namespace bpt = boost::posix_time;
const bpt::ptime now = bpt::second_clock::local_time();
uint64_t seconds = secondsSinceEpoch(now);
std::cout << "seconds: " << seconds << std::endl;
Converting a ptime to an integer is rather meaningless, since ptime is an abstraction of the actual time. An integer based time is a representation of that time as a count from an epoch. What you (probably) want to do is generate a time_duration from your time to the epoch you are interested in, then use the time_duration::ticks() to get the 64-bit integer. You may have to scale your result to your desired precision:
ptime myEpoch(date(1970,Jan,1)); // Or whatever your epocj is.
time_duration myTimeFromEpoch = myTime - myEpoch;
boost::int64_t myTimeAsInt = myTimeFromEpoch.ticks();
from the docs: http://www.boost.org/doc/libs/1_40_0/doc/html/date_time/posix_time.html
boost::int64_t ticks() Return the raw count of the duration type (will give unpredictable results if calling time_duration is a special_value). time_duration td(0,0,0, 1000); td.ticks() // --> 1000