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 QTimeZonePrivate &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() const { 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 // Match the unlocalized long form of QUtcTimeZonePrivate:
171 static NamePrefixMatch findLongUtcPrefix(QStringView text);
172
173 // returns "UTC" QString and QByteArray
174 [[nodiscard]] static inline QString utcQString()
175 {
176 return QStringLiteral("UTC");
177 }
178
179 [[nodiscard]] static inline QByteArray utcQByteArray()
180 {
181 return QByteArrayLiteral("UTC");
182 }
183
184 [[nodiscard]] static QTimeZone utcQTimeZone();
185
186#ifdef QT_BUILD_INTERNAL // For the benefit of a test
187 [[nodiscard]] static inline const QTimeZonePrivate *extractPrivate(const QTimeZone &zone)
188 {
189 return zone.d.operator->();
190 }
191#endif
192
193protected:
194 // Zones CLDR data says match a condition.
195 // Use to filter what the backend has available.
196 QList<QByteArrayView> matchingTimeZoneIds(QLocale::Territory territory) const;
197 QList<QByteArrayView> matchingTimeZoneIds(int utcOffset) const;
198
199#if QT_CONFIG(timezone_locale)
200 // Defined in qtimezonelocale.cpp
201 QString localeName(qint64 atMSecsSinceEpoch, int offsetFromUtc,
202 QTimeZone::TimeType timeType,
203 QTimeZone::NameType nameType,
204 const QLocale &locale) const;
205#endif // L10n helpers.
206
207 QByteArray m_id;
208};
210
211class Q_AUTOTEST_EXPORT QUtcTimeZonePrivate final : public QTimeZonePrivate
212{
213 QUtcTimeZonePrivate &operator=(const QUtcTimeZonePrivate &) const = delete;
214 QUtcTimeZonePrivate(const QUtcTimeZonePrivate &other);
215public:
216 // Create default UTC time zone
217 QUtcTimeZonePrivate();
218 // Create named time zone
219 QUtcTimeZonePrivate(const QByteArray &utcId);
220 // Create offset from UTC
221 QUtcTimeZonePrivate(qint32 offsetSeconds);
222 // Create custom offset from UTC
223 QUtcTimeZonePrivate(const QByteArray &zoneId, int offsetSeconds, const QString &name,
224 const QString &abbreviation, QLocale::Territory territory,
225 const QString &comment);
226 virtual ~QUtcTimeZonePrivate();
227
228 // Fall-back for UTC[+-]\d+(:\d+){,2} IDs.
229 static qint64 offsetFromUtcString(QByteArrayView id);
230
231 QUtcTimeZonePrivate *clone() const override;
232
233 Data data(qint64 forMSecsSinceEpoch) const override;
234 Data data(QTimeZone::TimeType timeType) const override;
235 bool isDataLocale(const QLocale &locale) const override;
236
237 QLocale::Territory territory() const override;
238 QString comment() const override;
239
240 QString displayName(qint64 atMSecsSinceEpoch,
241 QTimeZone::NameType nameType,
242 const QLocale &locale) const override;
243 QString displayName(QTimeZone::TimeType timeType,
244 QTimeZone::NameType nameType,
245 const QLocale &locale) const override;
246 QString abbreviation(qint64 atMSecsSinceEpoch) const override;
247
248 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
249 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
250
251 QByteArray systemTimeZoneId() const override;
252
253 bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override;
254 QList<QByteArray> availableTimeZoneIds() const override;
255 QList<QByteArray> availableTimeZoneIds(QLocale::Territory country) const override;
256 QList<QByteArray> availableTimeZoneIds(int utcOffset) const override;
257
258 void serialize(QDataStream &ds) const override;
259
260private:
261 void init(const QByteArray &zoneId, int offsetSeconds, const QString &name,
262 const QString &abbreviation, QLocale::Territory territory,
263 const QString &comment);
264
265 QString m_name;
266 QString m_abbreviation;
267 QString m_comment;
268 QLocale::Territory m_territory;
269 int m_offsetFromUtc;
270};
271
272// Platform backend cascade: match newBackendTimeZone() in qtimezone.cpp
273#if QT_CONFIG(timezone_tzdb)
274class QChronoTimeZonePrivate final : public QTimeZonePrivate
275{
276 QChronoTimeZonePrivate &operator=(const QChronoTimeZonePrivate &) const = delete;
277 QChronoTimeZonePrivate(const QChronoTimeZonePrivate &) = default;
278public:
279 QChronoTimeZonePrivate();
280 QChronoTimeZonePrivate(QByteArrayView id);
281 ~QChronoTimeZonePrivate() override;
282 QChronoTimeZonePrivate *clone() const override;
283
284 QByteArray systemTimeZoneId() const override;
285
286 QString abbreviation(qint64 atMSecsSinceEpoch) const override;
287 int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
288 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
289 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
290
291 bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override;
292 QList<QByteArray> availableTimeZoneIds() const override;
293 QList<QByteArray> availableTimeZoneIds(int utcOffset) const override;
294
295 bool hasDaylightTime() const override;
296 bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
297
298 Data data(qint64 forMSecsSinceEpoch) const override;
299
300 bool hasTransitions() const override;
301 Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
302 Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
303
304private:
305 const std::chrono::time_zone *const m_timeZone;
306};
307#elif defined(Q_OS_DARWIN)
308class Q_AUTOTEST_EXPORT QMacTimeZonePrivate final : public QTimeZonePrivate
309{
310 QMacTimeZonePrivate &operator=(const QMacTimeZonePrivate &) const = delete;
311 QMacTimeZonePrivate(const QMacTimeZonePrivate &other);
312public:
313 // Create default time zone
314 QMacTimeZonePrivate();
315 // Create named time zone
316 QMacTimeZonePrivate(const QByteArray &ianaId);
317 ~QMacTimeZonePrivate();
318
319 QMacTimeZonePrivate *clone() const override;
320
321 QString comment() const override;
322
323 using QTimeZonePrivate::displayName;
324 QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
325 const QLocale &locale) const override;
326 QString abbreviation(qint64 atMSecsSinceEpoch) const override;
327
328 int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
329 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
330 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
331
332 bool hasDaylightTime() const override;
333 bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
334
335 using QTimeZonePrivate::data;
336 Data data(qint64 forMSecsSinceEpoch) const override;
337
338 bool hasTransitions() const override;
339 Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
340 Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
341
342 QByteArray systemTimeZoneId() const override;
343 bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override;
344 QList<QByteArray> availableTimeZoneIds() const override;
345
346 NSTimeZone *nsTimeZone() const;
347
348private:
349 void init(const QByteArray &zoneId);
350
351 NSTimeZone *m_nstz;
352};
353#elif defined(Q_OS_ANDROID)
354class QAndroidTimeZonePrivate final : public QTimeZonePrivate
355{
356 QAndroidTimeZonePrivate &operator=(const QAndroidTimeZonePrivate &) const = delete;
357 QAndroidTimeZonePrivate(const QAndroidTimeZonePrivate &) = default;
358public:
359 // Create default time zone
360 QAndroidTimeZonePrivate();
361 // Create named time zone
362 QAndroidTimeZonePrivate(const QByteArray &ianaId);
363 ~QAndroidTimeZonePrivate();
364
365 QAndroidTimeZonePrivate *clone() const override;
366
367 using QTimeZonePrivate::displayName;
368 QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
369 const QLocale &locale) const override;
370 QString abbreviation(qint64 atMSecsSinceEpoch) const override;
371
372 int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
373 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
374 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
375
376 bool hasDaylightTime() const override;
377 bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
378
379 using QTimeZonePrivate::data;
380 Data data(qint64 forMSecsSinceEpoch) const override;
381
382 QByteArray systemTimeZoneId() const override;
383 bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override;
384 QList<QByteArray> availableTimeZoneIds() const override;
385
386private:
387 void init(const QByteArray &zoneId);
388
389 QJniObject androidTimeZone;
390};
391#elif defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS)
392struct QTzTransitionTime
393{
394 qint64 atMSecsSinceEpoch;
395 quint8 ruleIndex;
396};
397Q_DECLARE_TYPEINFO(QTzTransitionTime, Q_PRIMITIVE_TYPE);
398struct QTzTransitionRule
399{
400 int stdOffset = 0;
401 int dstOffset = 0;
402 quint8 abbreviationIndex = 0;
403};
404Q_DECLARE_TYPEINFO(QTzTransitionRule, Q_PRIMITIVE_TYPE);
405constexpr inline bool operator==(const QTzTransitionRule &lhs, const QTzTransitionRule &rhs) noexcept
406{ return lhs.stdOffset == rhs.stdOffset && lhs.dstOffset == rhs.dstOffset && lhs.abbreviationIndex == rhs.abbreviationIndex; }
407constexpr inline bool operator!=(const QTzTransitionRule &lhs, const QTzTransitionRule &rhs) noexcept
408{ return !operator==(lhs, rhs); }
409
410// These are stored separately from QTzTimeZonePrivate so that they can be
411// cached, avoiding the need to re-parse them from disk constantly.
412struct QTzTimeZoneCacheEntry
413{
414 QList<QTzTransitionTime> m_tranTimes;
415 QList<QTzTransitionRule> m_tranRules;
416 QList<QByteArray> m_abbreviations;
417 QByteArray m_posixRule;
418 QTzTransitionRule m_preZoneRule;
419 bool m_hasDst = false;
420};
421
422class Q_AUTOTEST_EXPORT QTzTimeZonePrivate final : public QTimeZonePrivate
423{
424 QTzTimeZonePrivate &operator=(const QTzTimeZonePrivate &) const = delete;
425 QTzTimeZonePrivate(const QTzTimeZonePrivate &) = default;
426public:
427 // Create default time zone
428 QTzTimeZonePrivate();
429 // Create named time zone
430 QTzTimeZonePrivate(const QByteArray &ianaId);
431 ~QTzTimeZonePrivate();
432
433 QTzTimeZonePrivate *clone() const override;
434
435 QLocale::Territory territory() const override;
436 QString comment() const override;
437
438 using QTimeZonePrivate::displayName;
439 QString displayName(QTimeZone::TimeType timeType,
440 QTimeZone::NameType nameType,
441 const QLocale &locale) const override;
442 QString abbreviation(qint64 atMSecsSinceEpoch) const override;
443
444 int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
445 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
446 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
447
448 bool hasDaylightTime() const override;
449 bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
450
451 Data data(qint64 forMSecsSinceEpoch) const override;
452 Data data(QTimeZone::TimeType timeType) const override;
453 bool isDataLocale(const QLocale &locale) const override;
454
455 bool hasTransitions() const override;
456 Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
457 Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
458
459 QByteArray systemTimeZoneId() const override;
460
461 bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override;
462 QList<QByteArray> availableTimeZoneIds() const override;
463 QList<QByteArray> availableTimeZoneIds(QLocale::Territory territory) const override;
464
465private:
466 static QByteArray staticSystemTimeZoneId();
467 QList<QTimeZonePrivate::Data> getPosixTransitions(qint64 msNear) const;
468
469 Data dataForTzTransition(QTzTransitionTime tran) const;
470 Data dataFromRule(QTzTransitionRule rule, qint64 msecsSinceEpoch) const;
471 QTzTimeZoneCacheEntry cached_data;
472 const QList<QTzTransitionTime> &tranCache() const { return cached_data.m_tranTimes; }
473};
474#elif QT_CONFIG(icu)
475class Q_AUTOTEST_EXPORT QIcuTimeZonePrivate final : public QTimeZonePrivate
476{
477 QIcuTimeZonePrivate &operator=(const QIcuTimeZonePrivate &) const = delete;
478 QIcuTimeZonePrivate(const QIcuTimeZonePrivate &other);
479public:
480 // Create default time zone
481 QIcuTimeZonePrivate();
482 // Create named time zone
483 QIcuTimeZonePrivate(const QByteArray &ianaId);
484 ~QIcuTimeZonePrivate();
485
486 QIcuTimeZonePrivate *clone() const override;
487
488 using QTimeZonePrivate::displayName;
489 QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
490 const QLocale &locale) const override;
491
492 int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
493 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
494 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
495
496 bool hasDaylightTime() const override;
497 bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
498
499 using QTimeZonePrivate::data;
500 Data data(qint64 forMSecsSinceEpoch) const override;
501
502 bool hasTransitions() const override;
503 Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
504 Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
505
506 QByteArray systemTimeZoneId() const override;
507
508 bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override;
509 QList<QByteArray> availableTimeZoneIds() const override;
510 QList<QByteArray> availableTimeZoneIds(QLocale::Territory territory) const override;
511 QList<QByteArray> availableTimeZoneIds(int offsetFromUtc) const override;
512
513private:
514 void init(const QByteArray &ianaId);
515
516 UCalendar *m_ucal;
517};
518#elif defined(Q_OS_WIN)
519class Q_AUTOTEST_EXPORT QWinTimeZonePrivate final : public QTimeZonePrivate
520{
521 QWinTimeZonePrivate &operator=(const QWinTimeZonePrivate &) const = delete;
522 QWinTimeZonePrivate(const QWinTimeZonePrivate &) = default;
523public:
524 struct QWinTransitionRule {
525 int startYear;
526 int standardTimeBias;
527 int daylightTimeBias;
528 SYSTEMTIME standardTimeRule;
529 SYSTEMTIME daylightTimeRule;
530 };
531
532 // Create default time zone
533 QWinTimeZonePrivate();
534 // Create named time zone
535 QWinTimeZonePrivate(const QByteArray &ianaId);
536 ~QWinTimeZonePrivate();
537
538 QWinTimeZonePrivate *clone() const override;
539
540 QString comment() const override;
541
542 using QTimeZonePrivate::displayName;
543 QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
544 const QLocale &locale) const override;
545 QString abbreviation(qint64 atMSecsSinceEpoch) const override;
546
547 int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
548 int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
549 int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
550
551 bool hasDaylightTime() const override;
552 bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
553
554 using QTimeZonePrivate::data;
555 Data data(qint64 forMSecsSinceEpoch) const override;
556
557 bool hasTransitions() const override;
558 Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
559 Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
560
561 QByteArray systemTimeZoneId() const override;
562
563 QList<QByteArray> availableTimeZoneIds() const override;
564
565 // For use within implementation's TransitionTimePair:
566 QTimeZonePrivate::Data ruleToData(const QWinTransitionRule &rule, qint64 atMSecsSinceEpoch,
567 QTimeZone::TimeType type, bool fakeDst = false) const;
568private:
569 void init(const QByteArray &ianaId);
570
571 QByteArray m_windowsId;
572 QString m_displayName;
573 QString m_standardName;
574 QString m_daylightName;
575 QList<QWinTransitionRule> m_tranRules;
576};
577#endif // C++20, Darwin, Android, Unix, ICU, Win.
578
579QT_END_NAMESPACE
580
581#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:1824
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)