From b726751cd12e7a93ddb7d2bf72fb821acafcef86 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 12 May 2016 16:28:22 -0700 Subject: Refactor & simplify QDateTime::setMSecsSinceEpoch Change-Id: I06bae9392f534e45b3f1ffff144df5ce1aa52636 Reviewed-by: Lars Knoll Reviewed-by: Edward Welbourne --- src/corelib/tools/qdatetime.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index 0b3050138c..4beb5d8d1e 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -3320,19 +3320,20 @@ uint QDateTime::toTime_t() const void QDateTime::setMSecsSinceEpoch(qint64 msecs) { QDateTimePrivate *d = this->d.data(); // detaches (and shadows d) + const auto spec = d->spec(); + auto status = d->m_status; - d->m_status &= ~QDateTimePrivate::ValidityMask; - switch (d->spec()) { + status &= ~QDateTimePrivate::ValidityMask; + switch (spec) { case Qt::UTC: - d->m_msecs = msecs; - d->m_status = d->m_status + status = status | QDateTimePrivate::ValidDate | QDateTimePrivate::ValidTime | QDateTimePrivate::ValidDateTime; break; case Qt::OffsetFromUTC: - d->m_msecs = msecs + (d->m_offsetFromUtc * 1000); - d->m_status = d->m_status + msecs = msecs + (d->m_offsetFromUtc * 1000); + status = status | QDateTimePrivate::ValidDate | QDateTimePrivate::ValidTime | QDateTimePrivate::ValidDateTime; @@ -3345,25 +3346,31 @@ void QDateTime::setMSecsSinceEpoch(qint64 msecs) d->m_offsetFromUtc = d->m_timeZone.d->offsetFromUtc(msecs); else d->m_offsetFromUtc = d->m_timeZone.d->standardTimeOffset(msecs); - d->m_msecs = msecs + (d->m_offsetFromUtc * 1000); - d->m_status = d->m_status + msecs = msecs + (d->m_offsetFromUtc * 1000); + status = status | QDateTimePrivate::ValidDate | QDateTimePrivate::ValidTime | QDateTimePrivate::ValidDateTime; - d->refreshDateTime(); #endif // QT_BOOTSTRAPPED break; case Qt::LocalTime: { QDate dt; QTime tm; - QDateTimePrivate::DaylightStatus status; - epochMSecsToLocalTime(msecs, &dt, &tm, &status); + QDateTimePrivate::DaylightStatus dstStatus; + epochMSecsToLocalTime(msecs, &dt, &tm, &dstStatus); d->setDateTime(dt, tm); - d->setDaylightStatus(status); - d->refreshDateTime(); + d->setDaylightStatus(dstStatus); + msecs = d->m_msecs; + status = d->m_status; break; } } + + d->m_status = status; + d->m_msecs = msecs; + + if (spec == Qt::LocalTime || spec == Qt::TimeZone) + d->refreshDateTime(); } /*! -- cgit v1.2.3