如果我使用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
。
答案 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)
public void Serialize<T>(...) where T : GeometricObject
或DATETIME
值可包括最小微秒(6位)精度的尾随小数秒部分。虽然可以识别此小数部分,但会将其从存储在TIMESTAMP
或DATETIME
列中的值中丢弃。
似乎秒是你用时间戳做的最好的。