diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2016-11-21 18:17:07 +0100 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2016-12-14 16:40:42 +0000 |
commit | 7c33c644d399e7d547ccf9f779197208d07bca84 (patch) | |
tree | de04e8d639b246c57667d6b7b6a259e7044c8e18 /src/corelib/tools/qdatetime.cpp | |
parent | 9d8db91ada0ab340ae781862f567c9b104e83c63 (diff) |
Fix QDateTime::toString(Qt::ISODate)'s handling of Qt::TimeZone
When the time is specified relative to a zone, the ISO date produced
lacked its offset suffix; all zones were treated as if they were local
time. Handle zone as for an offset from UTC and ensure we do set the
date-time objects's offset from UTC when it's zone-based.
Change-Id: I7c9896bb8ec0a9d89df14a6e94b005174ab9e943
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/tools/qdatetime.cpp')
-rw-r--r-- | src/corelib/tools/qdatetime.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index d52f03acae..4337a4d13f 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -2576,6 +2576,13 @@ static inline Qt::TimeSpec getSpec(const QDateTimeData &d) return extractSpec(getStatus(d)); } +#if QT_CONFIG(timezone) +void QDateTimePrivate::setUtcOffsetByTZ(qint64 atMSecsSinceEpoch) +{ + m_offsetFromUtc = m_timeZone.d->offsetFromUtc(atMSecsSinceEpoch); +} +#endif + // Refresh the LocalTime validity and offset static void refreshDateTime(QDateTimeData &d) { @@ -2591,10 +2598,12 @@ static void refreshDateTime(QDateTimeData &d) #if QT_CONFIG(timezone) // If not valid time zone then is invalid if (spec == Qt::TimeZone) { - if (!d->m_timeZone.isValid()) + if (!d->m_timeZone.isValid()) { status &= ~QDateTimePrivate::ValidDateTime; - else + } else { epochMSecs = QDateTimePrivate::zoneMSecsToEpochMSecs(msecs, d->m_timeZone, extractDaylightStatus(status), &testDate, &testTime); + d->setUtcOffsetByTZ(epochMSecs); + } } #endif // timezone @@ -3822,6 +3831,9 @@ QString QDateTime::toString(Qt::DateFormat format) const buf += QLatin1Char('Z'); break; case Qt::OffsetFromUTC: +#if QT_CONFIG(timezone) + case Qt::TimeZone: +#endif buf += toOffsetString(Qt::ISODate, offsetFromUtc()); break; default: |