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
.
Ответы
Ответ 1
С этой страницы:
https://dev.mysql.com/doc/refman/5.6/en/datetime.html
Значение DATETIME или TIMESTAMP может включать трейлинг-дробное секунд в минуту до точностью до микросекунд (6 цифр). В в частности, с MySQL 5.6.4, любая дробная часть в вставленном значении в столбце DATETIME или TIMESTAMP сохраняется, а не отбрасывается.
Итак, миллисекунда существует в MySQL! Но query.value()
не получает этого - на данный момент в истории Qt, как указано @peppe здесь.
Относится к исходному вопросу: нет правильного способа увидеть миллисекунду, так как запрос ее не имеет. Одним из вариантов может быть изменение запроса:
SELECT timestamp FROM table;
to
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");
Я получил информацию от здесь.
Ответ 2
С этой страницы:
https://dev.mysql.com/doc/refman/5.1/en/datetime.html
"Значение DATETIME или TIMESTAMP может включать в себя конечную часть дробных секунд с точностью до микросекунд (6 цифр). Хотя эта дробная часть распознана, она отбрасывается из значений, хранящихся в столбцах DATETIME или TIMESTAMP."
Кажется, что секунды - это лучшее, что вы можете сделать с меткой времени.