如果我使用 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
A DATETIME or TIMESTAMP value can include a trailing fractional seconds part in up to microseconds (6 digits) precision. In particular, as of MySQL 5.6.4, any fractional part in a value inserted into a DATETIME or TIMESTAMP column is stored rather than discarded.
所以,毫秒在MySQL中是有的!但是 query.value()
没有得到它 - 在 Qt 历史的这一点上由 @peppe 指出here .
回到原来的问题:没有正确的方法来查看毫秒,因为查询没有它。一种替代方法是修改查询,从:
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 获得了洞察力.
关于MySQL TIMESTAMP 到 QDateTime 以毫秒为单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31582537/