MySQL TIMESTAMP到QDateTime的时间为毫秒

KcF*_*nMi 13 mysql qt

如果我使用QSqlTableModel访问MySQL数据库,我可以使用以下代码转换TIMESTAMP字段:

QDateTime dateTime = index(section, column).data().toDateTime();
QString str = dateTime.toString("yyyy-MM-dd hh:mm:ss.zzz");
Run Code Online (Sandbox Code Playgroud)

所以str显示,即2014-06-22 22:11:44.221.但我想使用QSqlQuerry访问数据库,所以我这样做:

QDateTime dateTime = query.value(column).toDateTime();
str = dateTime.toString("yyyy-MM-dd hh:mm:ss.zzz");
Run Code Online (Sandbox Code Playgroud)

但现在我错过了毫秒,str显示2014-06-22 22:11:44.000.看到毫秒的正确方法是什么?

如果我这样做,str = query.value(column).toString();那么我得到2014-06-22T22:11:44.

KcF*_*nMi 8

从这个页面:

https://dev.mysql.com/doc/refman/5.6/en/datetime.html

DATETIME或TIMESTAMP值可以包括高达微秒(6位)精度的尾随小数秒部分.特别是,从MySQL 5.6.4开始,存储而不是丢弃插入DATETIME或TIMESTAMP列的值中的任何小数部分.

那么,毫秒就在MySQL中!但是query.value()没有得到它 - 在@peppe 这里指出的Qt历史中的这一点上.

回到最初的问题:没有正确的方法来查看毫秒,因为查询没有它.一种替代方法是修改查询,来自:

SELECT timestamp FROM table;
Run Code Online (Sandbox Code Playgroud)

SELECT DATE_FORMAT(timestamp, '%Y-%c-%e %H:%i:%s.%f') as timestamp FROM table;
Run Code Online (Sandbox Code Playgroud)

然后完成工作:

QString str = query.value(column).toString();
QDateTime dateTime = QDateTime::fromString(str, "yyyy-MM-dd hh:mm:ss.zzz000");
Run Code Online (Sandbox Code Playgroud)

我从这里得到了洞察力.