MySQL TIMESTAMP到QDateTime的时间为毫秒

时间:2015-07-23 08:53:39

标签: mysql qt

如果我使用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

2 个答案:

答案 0 :(得分: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 here所指出的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");

我从here获得了洞察力。

答案 1 :(得分:3)

来自MySQL 5.1 documentation

  

public void Serialize<T>(...) where T : GeometricObject DATETIME值可包括最小微秒(6位)精度的尾随小数秒部分。虽然可以识别此小数部分,但会将其从存储在TIMESTAMPDATETIME列中的值中丢弃。

似乎秒是你用时间戳做的最好的。