1

我在 Windows 上使用 Qt5.6、MSVC2013 32 位以及在 Ubuntu 上使用 Qt5.4、64 位。我正在尝试解析日志系统日志以将 _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 的结果是 ==> "2016-05-11 03:27:42.000" 毫秒都是 0,我希望有数字。

谢谢!

4

1 回答 1

0

毫秒为零的原因是因为您使用了 QDateTime 构建了fromTime_t()需要几秒钟的时间,因此您失去了亚秒级的准确性。您需要执行以下操作:

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

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

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

我认为您不能使用 QDateTime 处理微秒,文档没有在任何地方提及它们。

于 2017-01-09T12:20:06.923 回答