Pregunta

descubrí un resultado extraño en la biblioteca de fecha y hora Boost C ++. No hay incompatibilidad entre microsec_clock y second_clock, y yo no entiendo por qué es eso. Estoy usando Windows XP 32-bits

Mi recorte de código:

using namespace boost::posix_time;
...
ptime now = second_clock::universal_time();
std::cout << "Current Time is: "<< to_iso_extended_string(now)<< std::endl;
ptime now_2 = microsec_clock::universal_time();
std::cout << "Current Time is: "<< to_iso_extended_string(now_2)<< std::endl;
...

La impresión de que esperaba son hora actual sin milisegundos y con milliseonds. Sin embargo, lo que tengo en mi pc es:

2009-10-14T16:07:38  
1970-06-24T20:36:09.375890

No entiendo por qué hay una fecha weired (año 1970 ???) en mi tiempo microsec_clock. documentación relacionada para Boost: enlace a fecha y hora impulso

¿Fue útil?

Solución

No está seguro de lo que podría estar mal para usted; exactamente el mismo código funciona para mí.

$ cat > test.cc
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
using namespace boost::posix_time;
int main() {
    ptime now = second_clock::universal_time();
    std::cout << "Current Time is: "<< to_iso_extended_string(now)<< std::endl;
    ptime now_2 = microsec_clock::universal_time();
    std::cout << "Current Time is: "<< to_iso_extended_string(now_2)<< std::endl;
    return 0;
}
^D
$ c++ -lboost_date_time test.cc
$ ./a.out
Current Time is: 2009-10-14T16:26:55
Current Time is: 2009-10-14T16:26:55.586295

Implementación-sabia, second_clock utiliza time y usos microsec_clock gettimeofday o GetSystemTimeAsFileTime debajo, dependiendo de la plataforma. Algo parece mal con su plataforma - ¿cuál es su sistema operativo y versión


¿Cuál es su versión Boost? Si es 1,38 o inferior, actualice a 1.39 o aplicar el arreglo # 2809 manualmente.

--- boost/date_time/filetime_functions.hpp  (revision 53621)
+++ boost/date_time/filetime_functions.hpp  (revision 53622)
@@ -96,9 +96,7 @@
     {
         /* shift is difference between 1970-Jan-01 & 1601-Jan-01
         * in 100-nanosecond intervals */
-        const uint64_t c1 = 27111902UL;
-        const uint64_t c2 = 3577643008UL; // issues warning without 'UL'
-        const uint64_t shift = (c1 << 32) + c2;
+        const uint64_t shift = 116444736000000000ULL; // (27111902 << 32) + 3577643008

         union {
             FileTimeT as_file_time;

Windows FileTime tiene un desplazamiento diferente de vez en UNIX, y el código que se encontraba en Boost antes no generaría la diferencia de desplazamiento correcto en ciertos compiladores optimizadores.

Otros consejos

La fecha de 1970 muy probablemente proviene de la forma Tiempo Unix está representado, como segundo de 1 de enero de 1970. me imagino que tal vez de alguna manera está recibiendo la disponibilidad del sistema en milisegundos e interpretarla como segundos desde 1/1/1970. Un tiempo de actividad de un poco más de 4 horas podría llegar a esta fecha.

A diferencia de second_clock, la documentación microsec_clock::universal_time menciones:. Devuelve la hora UTC en base a la configuración de informáticos
Debe comprobar la configuración del reloj de hardware (o donde quiera microseg obtiene sus valores de).

editar:
Si no es en relación con tus ajustes del que tendría que ser un mal comportamiento en el impulso, lo que dudo mucho.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top