Details
-
Bug
-
Resolution: Done
-
P3: Somewhat important
-
5.2.0, 5.3.2, 5.4.0 Beta
-
Linux, Windows, MacOs (All)
-
190f64aab3fc8bb8e325bf48326c7b09d62b6419
Description
I have a PostgreSQL database table that contain timestamps in the format "2013-08-14 10:48:08.791993+09:30" but when querying the database the QDateTime returned is null. I've identified the offending Qt code in qtbase/src/sql/drivers/psql/qsql_psql.cpp and the fix is to turn off sanity checking. The code currently is:
// remove the timezone // TODO: fix this when timestamp support comes into QDateTime if (dtval.at(dtval.length() - 3) == QLatin1Char('+') || dtval.at(dtval.length() - 3) == QLatin1Char('-')) dtval.chop(3); // milliseconds are sometimes returned with 2 digits only if (dtval.at(dtval.length() - 3).isPunct()) dtval += QLatin1Char('0'); if (dtval.isEmpty()) return QVariant(QDateTime()); else return QVariant(QDateTime::fromString(dtval, Qt::ISODate));
Notice that the check to remove the timezone is incorrect (offset should be 6, not 3). The timezone is not removed and, because character len - 3 is punctuation, an extra '0' is appended, making the timestamp invalid.
Now that Qt5.2 handles timezones this code could be removed. The fix that works for me is below:
// remove the timezone // TODO: fix this when timestamp support comes into QDateTime //if (dtval.at(dtval.length() - 3) == QLatin1Char('+') || dtval.at(dtval.length() - 3) == QLatin1Char('-')) // dtval.chop(3); // milliseconds are sometimes returned with 2 digits only //if (dtval.at(dtval.length() - 3).isPunct()) // dtval += QLatin1Char('0'); //if (dtval.isEmpty()) // return QVariant(QDateTime()); //else return QVariant(QDateTime::fromString(dtval, Qt::ISODate));
Attachments
For Gerrit Dashboard: QTBUG-36211 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
77947,2 | Added timezone support for datetime fields in PSQL | 4.8 | qt/qt | Status: ABANDONED | -2 | 0 |
81175,2 | Added timezone support for datetime fields in PSQL | stable | qt/qtbase | Status: ABANDONED | -2 | 0 |
81184,1 | Added timezone support for datetime fields in PSQL | dev | qt/qtbase | Status: ABANDONED | -1 | 0 |
98668,1 | Added timezone support for datetime fields in PSQL | 5.3 | qt/qtbase | Status: ABANDONED | -1 | 0 |
98773,6 | Added timezone support for datetime fields in PSQL | 5.4 | qt/qtbase | Status: MERGED | +2 | 0 |