Как получить миллисекунды в QDateTime с QSqlQuery в Qt С++?

У меня есть этот sql-запрос:

SELECT LOG_TIME FROM PCY_LOG_EVENTS;

Это возвращает данные в формате "DD-MMM-YY HH.MM.SS.MS" следующим образом:

30-OCT-11 09.00.57.638000000 AM

В моем Qt-коде у меня есть следующее:

QSqlQuery query("SELECT LOG_TIME from PCY_LOG_EVENTS", db);

while(query.next()) {
    //Displays a QMessageBox with the millisecond part of the QDateTime
    this->messageBox(QString::number(query.value(0).toDateTime().time().msec()));
}

Я получаю 0 для всех значений миллисекунды. Есть ли причина, по которой значения миллисекунды не сохраняются? Как получить миллисекундные значения?

Ответ 1

Получить значение запроса как QString

QString dateTimeString = query.value(0).toString();

Затем используйте статическую fromString функцию QDateTime. Вы должны указать формат своей строки. Я предполагаю, что дни месяца имеют нулевой

QDateTime dateTime = QDateTime::fromString(dateTimeString, "dd-MMM-yy hh.mm.ss.zzz000000 A")

Обратите внимание на часть миллисекунды: zzz000000. Поскольку максимальное значение может быть 999, конечные нули вашего примера не имеют смысла. Таким образом, используя zzz, за которым следуют нули, вы можете получить милисекунды, хранящиеся в вашей строке. Единственная возможная проблема заключается в том, что ваша часть месяца использует буквы верхнего регистра, а MMM возвращает аббревиатуру месяца только с заглавной буквой. Надеюсь, с этим не будет проблем.

После выполнения преобразования вы можете легко получить миллисекунды:

int ms = dateTime.time().msec();

Дополнительные параметры форматирования здесь