Pergunta

Descobri um resultado estranho no aumento da biblioteca do C ++ Date Time. Há inconsistência entre microsec_clock e second_clock, e não entendo por que isso. Estou usando o Windows XP 32 bits

Meu corte 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;
...

A impressão que eu esperava é o horário atual sem milissegundos e com Milliseonds. No entanto, o que tenho no meu PC é:

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

Eu não entendo por que há uma data de Wireired (ano de 1970 ???) no meu microsec_clock Tempo. Documentação relacionada para Boost: Link para o aumento da data da data

Foi útil?

Solução

Não tenho certeza do que poderia estar errado para você; O mesmo código exatamente funciona para mim.

$ gato> test.cc
#incluiru003Cboost/date_time/gregorian/gregorian.hpp> #incluiru003Cboost/date_time/posix_time/posix_time.hpp> Usando o namespace boost :: posix_time; int main () {ptime agora = segundo_clock :: universal_time (); std :: cout << "A hora atual é:" << to_iso_extended_string (agora) << std :: endl; ptime agora_2 = microsec_clock :: universal_time (); std :: cout << "A hora atual é:" << to_iso_extended_string (agora_2) << std :: endl; retornar 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

Em termos de implementação, second_clock usos time e microsec_clock usos gettimeofday ou GetSystemTimeAsFileTime por baixo, dependendo da plataforma. Algo parece errado com sua plataforma - qual é o seu sistema operacional e versão?


Qual é a sua versão de impulso? Se for 1,38 ou menor, atualize para 1,39 ou aplique a correção para #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;

O Windows FileTime tem um deslocamento diferente do tempo do Unix, e o código que estava no Boost antes não geraria a diferença de deslocamento correta em determinados compiladores de otimização.

Outras dicas

A data de 1970 provavelmente vem do caminho tempo unix está representado, como segundos a partir de 1 de janeiro de 1970. Eu acho que talvez esteja de alguma forma obtendo o tempo de atividade do sistema em milissegundos e interprete -o em segundos desde 1/1/1970. Um tempo de atividade de pouco mais de 4 horas chegaria a essa data.

Diferente second_clock, a microsec_clock::universal_time Documentação menciona: Retorna o tempo da UTC com base em Configurações do computador.
Você deve verificar as configurações do relógio de hardware (ou de onde o Microsec obtém seus valores).

editar:
Se não estiver relacionado às configurações dos computadores, teria que ser um mau comportamento em impulso, o que duvido muito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top