Frage

Ich entdeckte ein seltsames Ergebnis in Boost C ++ Datum Zeitbibliothek. Es gibt Unstimmigkeit zwischen microsec_clock und second_clock, und ich verstehe nicht, warum das so ist. Ich verwende Windows XP 32-Bit

Mein Snip Code:

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

Der Druck-out ich erwarten sind aktuelle Zeit ohne Millisekunden und mit milliseonds. Doch was ich in meinem PC habe, ist:

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

Ich verstehe nicht, warum gibt es ein weired Datum (Jahr 1970 ???) in meiner microsec_clock Zeit. Verwandte Dokumentation Boost: Link zu boost Datum Zeit

War es hilfreich?

Lösung

Nicht sicher, was Sie falsch sein könnte; die exakt gleiche Code funktioniert für mich.

$ 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

Die Umsetzung weisen, second_clock verwendet time und microsec_clock verwendet gettimeofday oder GetSystemTimeAsFileTime darunter, auf der Plattform abhängig. Etwas scheint falsch mit Ihrer Plattform - was ist Ihr Betriebssystem und Version


Was ist Ihre Boost-Version? Wenn es 1,38 oder niedriger ist, ein Upgrade auf 1.39 oder das Update anwenden zu # 2809 manuell.

--- 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 hat einen anderen versetzt von UNIX Zeit, und den Code im Boost-war, bevor die richtige Offset-Differenz in bestimmtem optimierende Compiler nicht erzeugen würde.

Andere Tipps

Das 1970 Datum meisten kommt wahrscheinlich aus dem Weg Unix-Zeit dargestellt wird, als Sekunden von 1. JANUAR 1970. ich würde vermuten, dass vielleicht ist es irgendwie die Systemverfügbarkeit in Millisekunden bekommen und es in Sekunden seit dem 1.1.1970 zu interpretieren. Eine Betriebszeit von etwas mehr als 4 Stunden mit diesem Datum kommen würde.

Im Gegensatz zu second_clock, die microsec_clock::universal_time Dokumentation erwähnt: Gibt die UTC-Zeit basierend auf Computereinstellungen
. Sie sollten Ihre Hardware-Uhr-Einstellungen überprüfen (oder wo auch immer microsec erhält seine Werte aus).

edit:
Wenn es nicht auf Ihre Computer-Einstellungen im Zusammenhang hätte es ein Fehlverhalten in Schub sein, die ich sehr Zweifel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top