diff --git a/src/corelib/time/qtimezoneprivate_mac.mm b/src/corelib/time/qtimezoneprivate_mac.mm index b051b08ec7c..8d975467301 100644 --- a/src/corelib/time/qtimezoneprivate_mac.mm +++ b/src/corelib/time/qtimezoneprivate_mac.mm @@ -56,12 +56,10 @@ QMacTimeZonePrivate *QMacTimeZonePrivate::clone() const void QMacTimeZonePrivate::init(const QByteArray &ianaId) { - if (availableTimeZoneIds().contains(ianaId)) { - m_nstz = [[NSTimeZone timeZoneWithName:QString::fromUtf8(ianaId).toNSString()] retain]; - if (m_nstz) - m_id = ianaId; - } - if (!m_nstz) { + m_nstz = [[NSTimeZone timeZoneWithName:QString::fromUtf8(ianaId).toNSString()] retain]; + if (m_nstz) { + m_id = ianaId; + } else { // macOS has been seen returning a systemTimeZone which reports its name // as Asia/Kolkata, which doesn't appear in knownTimeZoneNames (which // calls the zone Asia/Calcutta). So explicitly check for the name @@ -285,6 +283,12 @@ QByteArray QMacTimeZonePrivate::systemTimeZoneId() const return QString::fromNSString(NSTimeZone.systemTimeZone.name).toUtf8(); } +bool QMacTimeZonePrivate::isTimeZoneIdAvailable(const QByteArray& ianaId) const +{ + QMacAutoReleasePool pool; + return [NSTimeZone timeZoneWithName:QString::fromUtf8(ianaId).toNSString()] != nil; +} + QList QMacTimeZonePrivate::availableTimeZoneIds() const { NSEnumerator *enumerator = NSTimeZone.knownTimeZoneNames.objectEnumerator; diff --git a/src/corelib/time/qtimezoneprivate_p.h b/src/corelib/time/qtimezoneprivate_p.h index 72b45e851bf..43a24449887 100644 --- a/src/corelib/time/qtimezoneprivate_p.h +++ b/src/corelib/time/qtimezoneprivate_p.h @@ -367,7 +367,7 @@ public: Data previousTransition(qint64 beforeMSecsSinceEpoch) const override; QByteArray systemTimeZoneId() const override; - + bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override; QList availableTimeZoneIds() const override; NSTimeZone *nsTimeZone() const;