diff options
-rw-r--r-- | src/corelib/time/qtimezoneprivate_mac.mm | 16 | ||||
-rw-r--r-- | src/corelib/time/qtimezoneprivate_p.h | 2 |
2 files changed, 11 insertions, 7 deletions
diff --git a/src/corelib/time/qtimezoneprivate_mac.mm b/src/corelib/time/qtimezoneprivate_mac.mm index b7cfd2bb85..8bc48f893b 100644 --- a/src/corelib/time/qtimezoneprivate_mac.mm +++ b/src/corelib/time/qtimezoneprivate_mac.mm @@ -57,12 +57,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 @@ -286,6 +284,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<QByteArray> 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 8085247953..4942ecd477 100644 --- a/src/corelib/time/qtimezoneprivate_p.h +++ b/src/corelib/time/qtimezoneprivate_p.h @@ -366,7 +366,7 @@ public: Data previousTransition(qint64 beforeMSecsSinceEpoch) const override; QByteArray systemTimeZoneId() const override; - + bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override; QList<QByteArray> availableTimeZoneIds() const override; NSTimeZone *nsTimeZone() const; |