2016-05-24 19 views
1

Ich verwende Qt5.6, MSVC2013 32bit auf Windows sowie Qt5.4, 64 Bit auf Ubuntu. Ich versuche Journal Syslog zu analysieren, um _SOURCE_REALTIME_TIMESTAMP in lesbaren Text zu konvertieren. Irgendwie ist die Millisekunde alles 0. Fragen, was ist der richtige Weg, um Millisekunden oder sogar Mikrosekunden anzuzeigen?Qt QDateTime Mikrosekunden Genauigkeit

bool ok; 
QString ss = "1462962462893977"; 
const qlonglong s = ss.toLongLong(&ok); 
if (!ok) { 
    qDebug() << "Error1"; 
} 
const QDateTime dt = QDateTime::fromTime_t(s/1000000); 
const QString textdate = dt.toString("yyyy-MM-dd hh:mm:ss.zzz"); 

qDebug() <<"==>" << textdate; 

Ergebnis aus PC/ubuntu ist ==> "2016.05.11 03: 27: 42.000" Die Millisekunden sind alle 0, die ich erwarte, dass Zahlen haben.

Danke!

Antwort

0

Der Grund dafür, dass die Millisekunden Null sind, liegt darin, dass Sie QDateTime mit fromTime_t() konstruiert haben, was einige Sekunden in Anspruch nimmt, so dass Sie Ihre Genauigkeit in weniger als einer Sekunde verlieren. Sie tun müssen, um so etwas wie:

const QDateTime dt = QDateTime::fromTime_t(s/1000000).addMSecs((s/1000) % 1000); 

Oder verwenden QDateTime::fromMSecsSinceEpoch(), die die Anzahl der Sekunden seit der Epoche nimmt, zum Beispiel (vorausgesetzt, Ihr Zeitstempel die Anzahl von Mikrosekunden seit der Epoche ist, das es aussieht):

Ich glaube nicht, dass Sie mit Mikrosekunden mit QDateTime arbeiten können, die Dokumentation erwähnt sie nirgendwo.

Verwandte Themen