From 9a440b6a972595bc556f34504cdbb3ea56ca53fd Mon Sep 17 00:00:00 2001 From: Michael Marley Date: Mon, 20 Apr 2015 12:43:53 -0400 Subject: [PATCH] Set the PostgreSQL session timezone to 'UTC' With Qt5, the PostgreSQL driver will transparently convert times to the database's timezone before inserting. Because the default is 'localtime', this causes the local time to be stored in the DB instead of the UTC time. This in turn causes the time displayed in the client to be wrong by the same offset as that timezone's offset. To fix the issue, just make sure the PostgreSQL is in the 'UTC' timezone, so the passed UTC time will not be converted. --- src/core/postgresqlstorage.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/core/postgresqlstorage.cpp b/src/core/postgresqlstorage.cpp index ca865704..68cf2544 100644 --- a/src/core/postgresqlstorage.cpp +++ b/src/core/postgresqlstorage.cpp @@ -136,6 +136,14 @@ bool PostgreSqlStorage::initDbSession(QSqlDatabase &db) return false; break; } + + // Set the PostgreSQL session timezone to UTC, since we want timestamps stored in UTC + QSqlQuery tzQuery = db.exec("SET timezone = 'UTC'"); + if (tzQuery.lastError().isValid()) { + quError() << "Failed to set timezone to UTC!"; + return false; + } + return true; } -- 2.20.1