2016-05-24 8 views
1

Я использую Qt5.6, MSVC2013 32bit на Windows, а также Qt5.4, 64 бит на Ubuntu. Я пытаюсь проанализировать журнал syslog для преобразования _SOURCE_REALTIME_TIMESTAMP в текст, читаемый человеком. Как-то миллисекунда - все 0. Интересно, какой правильный способ показать миллисекунды или даже микросекунды?Qt QDateTime точность микросекунды

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; 

Результат от PC/убунту ==> "2016-05-11 03: 27: 42,000" Миллисекунды все 0, которые я ожидаю, чтобы иметь номера.

Спасибо!

ответ

0

Причина, по которой миллисекунды равны нулю, состоит в том, что вы построили QDateTime, используя fromTime_t(), который занимает несколько секунд, поэтому вы теряете свою точность в секундах. Вам нужно сделать что-то вроде:

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

Или использовать QDateTime::fromMSecsSinceEpoch(), который принимает количество секунд с начала эпохи, например (предполагается, что временная отметка количество микросекунд с начала эпохи, которой она выглядит):

const QDateTime dt = QDateTime::fromMSecsSinceEpoch(s/1000); 

Я не думаю, что вы можете работать с микросекундами с использованием QDateTime, документация нигде не упоминает их.