如果我使用QSqlTableModel访问MySQL数据库,我可以使用以下代码转换TIMESTAMP字段:
QDateTime dateTime = index(section, column).data().toDateTime();
QString str = dateTime.toString("yyyy-MM-dd hh:mm:ss.zzz");
Run Code Online (Sandbox Code Playgroud)
所以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");
Run Code Online (Sandbox Code Playgroud)
但现在我错过了毫秒,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()没有得到它 - 在@peppe 这里指出的Qt历史中的这一点上.
回到最初的问题:没有正确的方法来查看毫秒,因为查询没有它.一种替代方法是修改查询,来自:
SELECT timestamp FROM table;
Run Code Online (Sandbox Code Playgroud)
至
SELECT DATE_FORMAT(timestamp, '%Y-%c-%e %H:%i:%s.%f') as timestamp FROM table;
Run Code Online (Sandbox Code Playgroud)
然后完成工作:
QString str = query.value(column).toString();
QDateTime dateTime = QDateTime::fromString(str, "yyyy-MM-dd hh:mm:ss.zzz000");
Run Code Online (Sandbox Code Playgroud)
我从这里得到了洞察力.
| 归档时间: |
|
| 查看次数: |
2533 次 |
| 最近记录: |