Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qtimezoneprivate_p.h
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// Copyright (C) 2013 John Layt <jlayt@kde.org>
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5
6#ifndef QTIMEZONEPRIVATE_P_H
7#define QTIMEZONEPRIVATE_P_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists for the convenience
14// of internal files. This header file may change from version to version
15// without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include "qlist.h"
21#include "qtimezone.h"
22#include "private/qlocale_p.h"
23#include "private/qdatetime_p.h"
24
25#if QT_CONFIG(timezone_tzdb)
26#include <chrono>
27#endif
28#include <optional>
29
30#if QT_CONFIG(icu)
31#include <unicode/ucal.h>
32#endif
33
34#ifdef Q_OS_DARWIN
35Q_FORWARD_DECLARE_OBJC_CLASS(NSTimeZone);
36#endif // Q_OS_DARWIN
37
38#ifdef Q_OS_WIN
39#include <qt_windows.h>
40#endif // Q_OS_WIN
41
42#ifdef Q_OS_ANDROID
43#include <QJniObject>
44#endif
45
48
49class Q_AUTOTEST_EXPORT QTimeZonePrivate : public QSharedData
50{
51 // Nothing should be copy-assigning instances of either this or its derived
52 // classes (only clone() should copy, using the copy-constructor):
53 bool operator=(const QTimeZonePrivate &) const = delete;
54protected:
55 QTimeZonePrivate(const QTimeZonePrivate &other) = default;
56public:
57 // Version of QTimeZone::OffsetData struct using msecs for efficiency
58 struct Data {
59 QString abbreviation;
60 qint64 atMSecsSinceEpoch;
61 int offsetFromUtc;
62 int standardTimeOffset;
63 int daylightTimeOffset;
64 Data()
65 : atMSecsSinceEpoch(QTimeZonePrivate::invalidMSecs()),
66 offsetFromUtc(QTimeZonePrivate::invalidSeconds()),
67 standardTimeOffset(QTimeZonePrivate::invalidSeconds()),
68 daylightTimeOffset(QTimeZonePrivate::invalidSeconds())
69 {}
70 Data(const QString &name, qint64 when, int offset, int standard)
71 : abbreviation(name),
72 atMSecsSinceEpoch(when),
73 offsetFromUtc(offset),
74 standardTimeOffset(standard),
75 daylightTimeOffset(offset - standard)
76 {}
77 };
78 typedef QList<Data> DataList;
79
80 // Create null time zone
81 QTimeZonePrivate();
82 virtual ~QTimeZonePrivate();
83
84 virtual QTimeZonePrivate *clone() const = 0;
85
86 bool operator==(const QTimeZonePrivate &other) const;
87 bool operator!=(const QTimeZonePrivate &other) const;
88
89 bool isValid() const;
90
91 QByteArray id() const;
92 virtual QLocale::Territory territory() const;
93 virtual QString comment() const;
94
95 virtual QString displayName(qint64 atMSecsSinceEpoch,
96 QTimeZone::NameType nameType,
97 const QLocale &locale) const;
98 virtual QString displayName(QTimeZone::TimeType timeType,
99 QTimeZone::NameType nameType,
100 const QLocale &locale) const;
101 virtual QString abbreviation(qint64 atMSecsSinceEpoch) const;
102
103 virtual int offsetFromUtc(qint64 atMSecsSinceEpoch) const;
104 virtual int standardTimeOffset(qint64 atMSecsSinceEpoch) const;
105 virtual int daylightTimeOffset(qint64 atMSecsSinceEpoch) const;
106
107 virtual bool hasDaylightTime() const;
108 virtual bool isDaylightTime(qint64 atMSecsSinceEpoch) const;
109
110 virtual Data data(qint64 forMSecsSinceEpoch) const;
111 virtual Data data(QTimeZone::TimeType timeType) const;
112 virtual bool isDataLocale(const QLocale &locale) const;
113 static bool isAnglicLocale(const QLocale &locale)
114 {
115 // Sufficiently like the C locale for displayName()-related purposes:
116 const QLocale::Language lang = locale.language();
117 return lang == QLocale::C
118 || (lang == QLocale::English && locale.script() == QLocale::LatinScript);
119 }
120 QDateTimePrivate::ZoneState stateAtZoneTime(qint64 forLocalMSecs,
121 QDateTimePrivate::TransitionOptions resolve) const;
122
123 virtual bool hasTransitions() const;
124 virtual Data nextTransition(qint64 afterMSecsSinceEpoch) const;
125 virtual Data previousTransition(qint64 beforeMSecsSinceEpoch) const;
126 DataList transitions(qint64 fromMSecsSinceEpoch, qint64 toMSecsSinceEpoch) const;
127
128 virtual QByteArray systemTimeZoneId() const;
129
130 virtual bool isTimeZoneIdAvailable(const QByteArray &ianaId) const;
131 virtual QList<QByteArray> availableTimeZoneIds() const = 0;
132 virtual QList<QByteArray> availableTimeZoneIds(QLocale::Territory territory) const;
133 virtual QList<QByteArray> availableTimeZoneIds(int utcOffset) const;
134
135 virtual void serialize(QDataStream &ds) const;
136
137 // Static Utility Methods
138 [[nodiscard]] static constexpr qint64 maxMSecs()
139 { return (std::numeric_limits<qint64>::max)(); }
140 [[nodiscard]] static constexpr qint64 minMSecs()
141 { return (std::numeric_limits<qint64>::min)() + 1; }
142 [[nodiscard]] static constexpr qint64 invalidMSecs()
143 { return (std::numeric_limits<qint64>::min)(); }
144 [[nodiscard]] static constexpr int invalidSeconds()
145 { return (std::numeric_limits<int>::min)(); }
146 static QTimeZone::OffsetData invalidOffsetData();
147 static QTimeZone::OffsetData toOffsetData(const Data &data);
148 static bool isValidId(const QByteArray &ianaId);
149 static QString isoOffsetFormat(int offsetFromUtc,
150 QTimeZone::NameType mode = QTimeZone::OffsetName);
151
152 static QByteArray aliasToIana(QByteArrayView alias);
153 static QByteArray ianaIdToWindowsId(const QByteArray &ianaId);
154 static QByteArray windowsIdToDefaultIanaId(const QByteArray &windowsId);
155 static QByteArray windowsIdToDefaultIanaId(const QByteArray &windowsId,
156 QLocale::Territory territory);
157 static QList<QByteArray> windowsIdToIanaIds(const QByteArray &windowsId);
158 static QList<QByteArray> windowsIdToIanaIds(const QByteArray &windowsId,
159 QLocale::Territory territory);
160 struct NamePrefixMatch
161 {
162 QByteArray ianaId;
163 qsizetype nameLength = 0;
164 QTimeZone::TimeType timeType = QTimeZone::GenericTime;
165 operator bool() { return nameLength > 0; }
166 };
167 static NamePrefixMatch findLongNamePrefix(QStringView text, const QLocale &locale,
168 std::optional<qint64> atEpochMillis = std::nullopt);
169 static NamePrefixMatch findNarrowOffsetPrefix(QStringView text, const QLocale &locale,
170 QLocale::FormatType scale);
171 // Match the unlocalized long form of QUtcTimeZonePrivate:
172 static NamePrefixMatch findLongUtcPrefix(QStringView text);
173
174 // returns "UTC" QString and QByteArray
175 [[nodiscard]] static inline QString utcQString()
176 {
177 return QStringLiteral("UTC");
178 }
179
180 [[nodiscard]] static inline QByteArray utcQByteArray()
181 {
182 return QByteArrayLiteral("UTC");
183 }
184
185 [[nodiscard]] static QTimeZone utcQTimeZone();
186
187#ifdef QT_BUILD_INTERNAL // For the benefit of a test
188 [[nodiscard]] static inline const QTimeZonePrivate *extractPrivate(const QTimeZone &zone)
189 {
190 return zone.d.operator->();
191 }
192#endif
193
194protected:
195 // Zones CLDR data says match a condition.
196 // Use to filter what the backend has available.
197 QList<QByteArrayView> matchingTimeZoneIds(QLocale::Territory territory) const;
198 QList<QByteArrayView> matchingTimeZoneIds(int utcOffset) const;
199
200#if QT_CONFIG(timezone_locale)
201 // Defined in qtimezonelocale.cpp
202 QString localeName(qint64 atMSecsSinceEpoch, int offsetFromUtc,
203 QTimeZone::TimeType timeType,
204 QTimeZone::NameType nameType,
205 const QLocale &locale) const;
206#endif // L10n helpers.
207
208 QByteArray m_id;
209};
211
212template<> QTimeZonePrivate *QSharedDataPointer<QTimeZonePrivate>::clone();
213
214class Q_AUTOTEST_EXPORT QUtcTimeZonePrivate final : public QTimeZonePrivate
215{
216 bool operator=(const QUtcTimeZonePrivate &) const = delete;
217 QUtcTimeZonePrivate(const QUtcTimeZonePrivate &other);
218public:
219 // Create default UTC time zone
220 QUtcTimeZonePrivate();
221 // Create named time zone
222 QUtcTimeZonePrivate(const QByteArray &utcId);
223 // Create offset from UTC
224 QUtcTimeZonePrivate(qint32 offsetSeconds);
225 // Create custom offset from UTC
226 QUtcTimeZonePrivate(const QByteArray &zoneId, int offsetSeconds, const QString &name,
227 const QString &abbreviation, QLocale::Territory territory,
228 const QString &comment);
229 virtual ~QUtcTimeZonePrivate();
230
231 // Fall-back for UTC[+-]\d+(:\d+){,2} IDs.
232 static qint64 offsetFromUtcString(QByteArrayView id);
233
234 QUtcTimeZonePrivate *clone() const override;
235
236 Data data(qint64 forMSecsSinceEpoch) const override;
237 Data data(QTimeZone::TimeType timeType) const override;
238 bool isDataLocale(const QLocale &locale) const override;
239
240 QLocale::Territory territory() const override;
241 QString comment() const override;
242
243 QString displayName(qint64 atMSecsSinceEpoch,
244 QTimeZone::NameType nameType,
245 const QLocale &locale) const override;
246 QString displayName(QTimeZone::TimeType timeType,
247 QTimeZone::NameType nameType,
248 const QLocale &locale) const override;
249 QString abbreviation(qint64 atMSecsSinceEpoch) const override;
250
251 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
252 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
253
254 QByteArray systemTimeZoneId() const override;
255
256 bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override;
257 QList<QByteArray> availableTimeZoneIds() const override;
258 QList<QByteArray> availableTimeZoneIds(QLocale::Territory country) const override;
259 QList<QByteArray> availableTimeZoneIds(int utcOffset) const override;
260
261 void serialize(QDataStream &ds) const override;
262
263private:
264 void init(const QByteArray &zoneId, int offsetSeconds, const QString &name,
265 const QString &abbreviation, QLocale::Territory territory,
266 const QString &comment);
267
268 QString m_name;
269 QString m_abbreviation;
270 QString m_comment;
271 QLocale::Territory m_territory;
272 int m_offsetFromUtc;
273};
274
275// Platform backend cascade: match newBackendTimeZone() in qtimezone.cpp
276#if QT_CONFIG(timezone_tzdb)
277class QChronoTimeZonePrivate final : public QTimeZonePrivate
278{
279 bool operator=(const QChronoTimeZonePrivate &) const = delete;
280 QChronoTimeZonePrivate(const QChronoTimeZonePrivate &) = default;
281public:
282 QChronoTimeZonePrivate();
283 QChronoTimeZonePrivate(QByteArrayView id);
284 ~QChronoTimeZonePrivate() override;
285 QChronoTimeZonePrivate *clone() const override;
286
287 QByteArray systemTimeZoneId() const override;
288
289 QString abbreviation(qint64 atMSecsSinceEpoch) const override;
290 int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
291 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
292 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
293
294 bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override;
295 QList<QByteArray> availableTimeZoneIds() const override;
296 QList<QByteArray> availableTimeZoneIds(int utcOffset) const override;
297
298 bool hasDaylightTime() const override;
299 bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
300
301 Data data(qint64 forMSecsSinceEpoch) const override;
302
303 bool hasTransitions() const override;
304 Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
305 Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
306
307private:
308 const std::chrono::time_zone *const m_timeZone;
309};
310#elif defined(Q_OS_DARWIN)
311class Q_AUTOTEST_EXPORT QMacTimeZonePrivate final : public QTimeZonePrivate
312{
313 bool operator=(const QMacTimeZonePrivate &) const = delete;
314 QMacTimeZonePrivate(const QMacTimeZonePrivate &other);
315public:
316 // Create default time zone
317 QMacTimeZonePrivate();
318 // Create named time zone
319 QMacTimeZonePrivate(const QByteArray &ianaId);
320 ~QMacTimeZonePrivate();
321
322 QMacTimeZonePrivate *clone() const override;
323
324 QString comment() const override;
325
326 using QTimeZonePrivate::displayName;
327 QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
328 const QLocale &locale) const override;
329 QString abbreviation(qint64 atMSecsSinceEpoch) const override;
330
331 int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
332 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
333 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
334
335 bool hasDaylightTime() const override;
336 bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
337
338 using QTimeZonePrivate::data;
339 Data data(qint64 forMSecsSinceEpoch) const override;
340
341 bool hasTransitions() const override;
342 Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
343 Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
344
345 QByteArray systemTimeZoneId() const override;
346 bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override;
347 QList<QByteArray> availableTimeZoneIds() const override;
348
349 NSTimeZone *nsTimeZone() const;
350
351private:
352 void init(const QByteArray &zoneId);
353
354 NSTimeZone *m_nstz;
355};
356#elif defined(Q_OS_ANDROID)
357class QAndroidTimeZonePrivate final : public QTimeZonePrivate
358{
359 bool operator=(const QAndroidTimeZonePrivate &) const = delete;
360 QAndroidTimeZonePrivate(const QAndroidTimeZonePrivate &) = default;
361public:
362 // Create default time zone
363 QAndroidTimeZonePrivate();
364 // Create named time zone
365 QAndroidTimeZonePrivate(const QByteArray &ianaId);
366 ~QAndroidTimeZonePrivate();
367
368 QAndroidTimeZonePrivate *clone() const override;
369
370 using QTimeZonePrivate::displayName;
371 QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
372 const QLocale &locale) const override;
373 QString abbreviation(qint64 atMSecsSinceEpoch) const override;
374
375 int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
376 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
377 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
378
379 bool hasDaylightTime() const override;
380 bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
381
382 using QTimeZonePrivate::data;
383 Data data(qint64 forMSecsSinceEpoch) const override;
384
385 QByteArray systemTimeZoneId() const override;
386 bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override;
387 QList<QByteArray> availableTimeZoneIds() const override;
388
389private:
390 void init(const QByteArray &zoneId);
391
392 QJniObject androidTimeZone;
393};
394#elif defined(Q_OS_UNIX)
395struct QTzTransitionTime
396{
397 qint64 atMSecsSinceEpoch;
398 quint8 ruleIndex;
399};
400Q_DECLARE_TYPEINFO(QTzTransitionTime, Q_PRIMITIVE_TYPE);
401struct QTzTransitionRule
402{
403 int stdOffset = 0;
404 int dstOffset = 0;
405 quint8 abbreviationIndex = 0;
406};
407Q_DECLARE_TYPEINFO(QTzTransitionRule, Q_PRIMITIVE_TYPE);
408constexpr inline bool operator==(const QTzTransitionRule &lhs, const QTzTransitionRule &rhs) noexcept
409{ return lhs.stdOffset == rhs.stdOffset && lhs.dstOffset == rhs.dstOffset && lhs.abbreviationIndex == rhs.abbreviationIndex; }
410constexpr inline bool operator!=(const QTzTransitionRule &lhs, const QTzTransitionRule &rhs) noexcept
411{ return !operator==(lhs, rhs); }
412
413// These are stored separately from QTzTimeZonePrivate so that they can be
414// cached, avoiding the need to re-parse them from disk constantly.
415struct QTzTimeZoneCacheEntry
416{
417 QList<QTzTransitionTime> m_tranTimes;
418 QList<QTzTransitionRule> m_tranRules;
419 QList<QByteArray> m_abbreviations;
420 QByteArray m_posixRule;
421 QTzTransitionRule m_preZoneRule;
422 bool m_hasDst = false;
423};
424
425class Q_AUTOTEST_EXPORT QTzTimeZonePrivate final : public QTimeZonePrivate
426{
427 bool operator=(const QTzTimeZonePrivate &) const = delete;
428 QTzTimeZonePrivate(const QTzTimeZonePrivate &) = default;
429public:
430 // Create default time zone
431 QTzTimeZonePrivate();
432 // Create named time zone
433 QTzTimeZonePrivate(const QByteArray &ianaId);
434 ~QTzTimeZonePrivate();
435
436 QTzTimeZonePrivate *clone() const override;
437
438 QLocale::Territory territory() const override;
439 QString comment() const override;
440
441 using QTimeZonePrivate::displayName;
442 QString displayName(QTimeZone::TimeType timeType,
443 QTimeZone::NameType nameType,
444 const QLocale &locale) const override;
445 QString abbreviation(qint64 atMSecsSinceEpoch) const override;
446
447 int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
448 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
449 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
450
451 bool hasDaylightTime() const override;
452 bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
453
454 Data data(qint64 forMSecsSinceEpoch) const override;
455 Data data(QTimeZone::TimeType timeType) const override;
456 bool isDataLocale(const QLocale &locale) const override;
457
458 bool hasTransitions() const override;
459 Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
460 Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
461
462 QByteArray systemTimeZoneId() const override;
463
464 bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override;
465 QList<QByteArray> availableTimeZoneIds() const override;
466 QList<QByteArray> availableTimeZoneIds(QLocale::Territory territory) const override;
467
468private:
469 static QByteArray staticSystemTimeZoneId();
470 QList<QTimeZonePrivate::Data> getPosixTransitions(qint64 msNear) const;
471
472 Data dataForTzTransition(QTzTransitionTime tran) const;
473 Data dataFromRule(QTzTransitionRule rule, qint64 msecsSinceEpoch) const;
474 QTzTimeZoneCacheEntry cached_data;
475 const QList<QTzTransitionTime> &tranCache() const { return cached_data.m_tranTimes; }
476};
477#elif QT_CONFIG(icu)
478class Q_AUTOTEST_EXPORT QIcuTimeZonePrivate final : public QTimeZonePrivate
479{
480 bool operator=(const QIcuTimeZonePrivate &) const = delete;
481 QIcuTimeZonePrivate(const QIcuTimeZonePrivate &other);
482public:
483 // Create default time zone
484 QIcuTimeZonePrivate();
485 // Create named time zone
486 QIcuTimeZonePrivate(const QByteArray &ianaId);
487 ~QIcuTimeZonePrivate();
488
489 QIcuTimeZonePrivate *clone() const override;
490
491 using QTimeZonePrivate::displayName;
492 QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
493 const QLocale &locale) const override;
494
495 int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
496 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
497 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
498
499 bool hasDaylightTime() const override;
500 bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
501
502 using QTimeZonePrivate::data;
503 Data data(qint64 forMSecsSinceEpoch) const override;
504
505 bool hasTransitions() const override;
506 Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
507 Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
508
509 QByteArray systemTimeZoneId() const override;
510
511 bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override;
512 QList<QByteArray> availableTimeZoneIds() const override;
513 QList<QByteArray> availableTimeZoneIds(QLocale::Territory territory) const override;
514 QList<QByteArray> availableTimeZoneIds(int offsetFromUtc) const override;
515
516private:
517 void init(const QByteArray &ianaId);
518
519 UCalendar *m_ucal;
520};
521#elif defined(Q_OS_WIN)
522class Q_AUTOTEST_EXPORT QWinTimeZonePrivate final : public QTimeZonePrivate
523{
524 bool operator=(const QWinTimeZonePrivate &) const = delete;
525 QWinTimeZonePrivate(const QWinTimeZonePrivate &) = default;
526public:
527 struct QWinTransitionRule {
528 int startYear;
529 int standardTimeBias;
530 int daylightTimeBias;
531 SYSTEMTIME standardTimeRule;
532 SYSTEMTIME daylightTimeRule;
533 };
534
535 // Create default time zone
536 QWinTimeZonePrivate();
537 // Create named time zone
538 QWinTimeZonePrivate(const QByteArray &ianaId);
539 ~QWinTimeZonePrivate();
540
541 QWinTimeZonePrivate *clone() const override;
542
543 QString comment() const override;
544
545 using QTimeZonePrivate::displayName;
546 QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
547 const QLocale &locale) const override;
548 QString abbreviation(qint64 atMSecsSinceEpoch) const override;
549
550 int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
551 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
552 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
553
554 bool hasDaylightTime() const override;
555 bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
556
557 using QTimeZonePrivate::data;
558 Data data(qint64 forMSecsSinceEpoch) const override;
559
560 bool hasTransitions() const override;
561 Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
562 Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
563
564 QByteArray systemTimeZoneId() const override;
565
566 QList<QByteArray> availableTimeZoneIds() const override;
567
568 // For use within implementation's TransitionTimePair:
569 QTimeZonePrivate::Data ruleToData(const QWinTransitionRule &rule, qint64 atMSecsSinceEpoch,
570 QTimeZone::TimeType type, bool fakeDst = false) const;
571private:
572 void init(const QByteArray &ianaId);
573
574 QByteArray m_windowsId;
575 QString m_displayName;
576 QString m_standardName;
577 QString m_daylightName;
578 QList<QWinTransitionRule> m_tranRules;
579};
580#endif // C++20, Darwin, Android, Unix, ICU, Win.
581
582QT_END_NAMESPACE
583
584#endif // QTIMEZONEPRIVATE_P_H
Definition qlist.h:80
static constexpr WindowsData windowsDataTable[]
static constexpr ZoneData zoneDataTable[]
Definition qcompare.h:76
Q_DECLARE_TYPEINFO(QObjectPrivate::ConnectionList, Q_RELOCATABLE_TYPE)
#define QStringLiteral(str)
Definition qstring.h:1826
constexpr bool atLowerWindowsKey(WindowsData entry, qint16 winIdKey) noexcept
static bool earlierAliasId(AliasData entry, QByteArrayView aliasId) noexcept
static bool isEntryInIanaList(QByteArrayView id, QByteArrayView ianaIds)
static bool earlierWinData(WindowsData less, WindowsData more) noexcept
static auto zoneStartForWindowsId(quint16 windowsIdKey) noexcept
constexpr bool zoneAtLowerWindowsKey(ZoneData entry, qint16 winIdKey) noexcept
static QList< QByteArray > selectAvailable(QList< QByteArrayView > &&desired, const QList< QByteArray > &all)
static quint16 toWindowsIdKey(const QByteArray &winId)
static QByteArray toWindowsIdLiteral(quint16 windowsIdKey)
constexpr bool atLowerUtcOffset(UtcData entry, qint32 offsetSeconds) noexcept
constexpr bool earlierZoneData(ZoneData less, ZoneData more) noexcept
static bool earlierWindowsId(WindowsData entry, QByteArrayView winId) noexcept
QT_REQUIRE_CONFIG(timezone)