Qt QDateTime微秒精度

时间:2016-05-24 22:14:59

标签: precision journal qdatetime

我在Windows上使用Qt5.6,MSVC2013 32位,在Ubuntu上使用64位Qt5.4。我正在尝试解析Journal syslog以将_SOURCE_REALTIME_TIMESTAMP转换为人类可读的文本。不知怎的,毫秒都是0.想知道什么是显示毫秒甚至微秒的正确方法?

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 / UBuntu的结果是==&gt; &#34; 2016-05-11 03:27:42.000&#34; 毫秒都是0,我希望有数字。

谢谢!

1 个答案:

答案 0 :(得分:0)

毫秒为零的原因是因为您使用fromTime_t()构造了QDateTime,这需要几秒钟,因此您将失去亚秒精度。您需要执行以下操作:

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

或者使用QDateTime::fromMSecsSinceEpoch(),它取自纪元以来的秒数(假设您的时间戳是自纪元以来的微秒数,它看起来像是):

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

我不认为你可以使用QDateTime处理微秒,文档没有在任何地方提到它们。