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