Me gustaría transferir boost::posix_time::ptime
a través de la red como boost::int64_t
. De acuerdo con A way to turn boost::posix_time::ptime into an __int64, puedo definir fácilmente mi propia época y solo transferir time_duration
de esa época de referencia como un entero de 64 bits. Pero, ¿cómo convertir de nuevo a ptime
?Convierte int64_t en time_duration
#include <iostream>
#include <cassert>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/gregorian/greg_month.hpp>
using namespace std;
using boost::posix_time::ptime;
using boost::posix_time::time_duration;
using boost::gregorian::date;
int main(int argc, char ** argv){
ptime t = boost::posix_time::microsec_clock::local_time();
// convert to int64_t
ptime myEpoch(date(1970,boost::gregorian::Jan,1));
time_duration myTimeFromEpoch = t - myEpoch;
boost::int64_t myTimeAsInt = myTimeFromEpoch.ticks();
// convert back to ptime
ptime test = myEpoch + time_duration(myTimeAsInt);
assert(test == t);
return 0;
}
Esto no está funcionando ya que el constructor time_duration
tomando un recuento de paso como argumento es privado. También estoy interesado en cualquier otra forma para simplemente transferir ese ptime
sobre tipos de datos simples.
¿El valor devuelto por ticks() es portátil entre las máquinas? Es posible que necesite usar ticks_per_second() para normalizarlo. Si myEpoch es el mismo en ambos extremos, ¿por qué no puedes simplemente transferir una marca de tiempo de una época de milisegundos de 64 bits? – hplbsh
Está trabajando con una resolución de milisegundos. ¿Podría publicar su comentario como respuesta, por favor? – tibur