MySQL TIMESTAMP到QDateTime,以毫秒为单位

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

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

所以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");

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

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


从此页:

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

DATETIME或TIMESTAMP值可以包含最大微秒(6位)精度的尾随小数秒部分。 特别是,从MySQL 5.6.4开始,插入到DATETIME或TIMESTAMP列的值中的任何小数部分都被存储而不是丢弃。

所以,毫秒在MySQL里面! 但是query.value()并没有得到它 - 在这里,在@tppe这里指出的Qt历史中。

回到原来的问题:没有正确的方法来查看毫秒,因为查询没有它。 一种替代方案可以是修改查询,从:

SELECT timestamp FROM table;

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

然后完成这项工作:

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

我从这里得到了见解。


从此页:

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

“一个DATETIME或TIMESTAMP值可以包含一个以秒为单位(6位数)精度的结尾部分小数部分,虽然这个小数部分被识别,但它会从存储在DATETIME或TIMESTAMP列中的值中丢弃。”

看起来秒是用时间戳可以做的最好的。

链接地址: http://www.djcxy.com/p/4251.html

上一篇: MySQL TIMESTAMP to QDateTime with milliseconds

下一篇: MySQL timezone change?