Конвертировать дату/время из sqlite в QDateTime

Используется QtSql. В Sqlite дата/время хранится как число с плавающей точкой, при выборке хочется привести его к типу QDateTime. Как лучше это сделать?


Ответы (1 шт):

Автор решения: sercxjo

Если хочется избежать преобразований данных в SQL, следующая функция делает это в C++. (На базе исправленного кода из forum.qt.io)

QDateTime toDateTime(const QVariant& v) const {
  bool ok = false;
  // Julian days start at noon (12:00 UTC)
  double julian = v.toDouble(&ok) + 0.5;
  if (!ok) {
    return QDateTime();
  }

  // The day number is the integer part of the date
  int julianDays = qFloor(julian);
  QDate d = QDate::fromJulianDay(julianDays);

  // The fraction is the time of day
  double julianMSecs = (julian - static_cast<double>(julianDays)) * 86400.0 * 1000;

  QTime t = QTime(0, 0, 0, 0).addMSecs(qRound(julianMSecs));

  return QDateTime(d, t, Qt::UTC);
}
→ Ссылка