c++ - reloj - nanosegundos
Conversión de milisegundos UTC en lectura humana Fecha_hora (1)
time_t
suele ser segundos desde "la época", en lugar de milisegundos. Si no te importan los milisegundos, deberías poder hacer esto:
std::time_t tt = static_cast<time_t>(ticksFromEpoch/1000)
Si te importan los milisegundos, puedes volver a agregarlos al final (lo cual es complicado de hacer para las 12: 00: 00.001 AM).
O necesitarás ir a otra ruta. Es posible que necesite usar algo como esto: (no probado)
boost::posix_time::ptime t2(
date(1970,Jan,1), //The epoch
boost::posix_time::seconds( ticksFromEpoch / 1000 ) + // Number of seconds
boost::posix_time::microseconds( ticksFromEpoch % 1000) // And the micros too.
);
Estoy luchando para descubrir cómo realizar una conversión con boost :: date_time. Quiero convertir un valor de milisegundo medido a partir de la época de Unix (00:00, 1 de enero de 1970) en una cadena legible por humanos, algo así como: 2/13/2012 15:20:11
sería ideal.
He intentado algunas sugerencias estándar de C ++ / boost que he visto pero que todavía no he tenido suerte. Aquí está el código que uso:
long long ticksFromEpoch = 1329117220501;
std::time_t tt = static_cast<time_t>(ticksFromEpoch);
boost::posix_time::ptime dt = boost::posix_time::from_time_t(tt);
// Create a time_zone_ptr for the desired time zone and use it to create a local_date_time
boost::local_time::time_zone_ptr zone(new boost::local_time::posix_time_zone("UTC"));
boost::local_time::local_date_time dt_with_zone(dt, zone);
std::stringstream strm;
strm.imbue(std::locale(std::cout.getloc(), new boost::local_time::local_time_facet("%Y-%m-%d %H:%M:%S"))); // 15:14
strm << dt_with_zone;
// Print the stream''s content to the console
std::cout << strm.str() << std::endl;
El resultado es: 2032-07-01 20:20:37
que es claramente incorrecto. Sospecho que no estoy construyendo la variable ticksFromEpoch
correctamente, pero no estoy seguro de por qué. ¿Alguien puede señalarme en la dirección correcta? ¡¡Cualquier ayuda es muy apreciada!!