10#include <private/qnumeric_p.h>
11#include <private/qtools_p.h>
28 if (
data.windowsId() == winId)
29 return data.windowsIdKey;
37 if (
data.windowsIdKey == windowsIdKey)
38 return data.windowsId().toByteArray();
75 return !(*
this ==
other);
107 QTimeZone::NameType nameType,
110 if (nameType == QTimeZone::OffsetName)
114 return displayName(QTimeZone::DaylightTime, nameType, locale);
116 return displayName(QTimeZone::StandardTime, nameType, locale);
120 QTimeZone::NameType nameType,
191 std::integral_constant<qint64, 17 * 3600 * 1000> seventeenHoursInMSecs;
203 qAddOverflow(forLocalMSecs, seventeenHoursInMSecs, &millis)
206 Q_ASSERT(recent < imminent && seventeenHoursInMSecs < imminent - recent + 2);
326 const bool nextFirst = nextIsDst == (
hint > 0);
327 for (
int i = 0;
i < 2;
i++) {
334 if (nextFirst ?
i == 0 :
i) {
351 return nextFirst ? tran : nextTran;
371 const int offsetInDst =
qMax(early, late);
372 const int offsetInStd =
qMin(early, late);
374 const qint64 forDst = forLocalMSecs - offsetInDst * 1000;
375 const qint64 forStd = forLocalMSecs - offsetInStd * 1000;
377 const qint64 hinted =
hint > 0 ? forDst : forStd;
379 utcEpochMSecs = hinted;
381 utcEpochMSecs = forDst;
383 utcEpochMSecs = forStd;
386 const int dstStep = (offsetInDst - offsetInStd) * 1000;
390 utcEpochMSecs = (
hint > 0) ? forStd - dstStep : forDst + dstStep;
394 return data(utcEpochMSecs);
415 qint64 toMSecsSinceEpoch)
const
418 if (toMSecsSinceEpoch >= fromMSecsSinceEpoch) {
422 &&
next.atMSecsSinceEpoch <= toMSecsSinceEpoch) {
439 return std::binary_search(tzIds.
begin(), tzIds.
end(), ianaId);
455 for (
auto l1 :
data.ids())
460 std::sort(regions.
begin(), regions.
end());
467 std::set_intersection(all.begin(), all.end(), regions.
cbegin(), regions.
cend(),
468 std::back_inserter(
result));
480 if (
data.windowsIdKey == winData.windowsIdKey) {
481 for (
auto l1 :
data.ids())
495 std::set_intersection(all.begin(), all.end(),
offsets.cbegin(),
offsets.cend(),
496 std::back_inserter(
result));
500#ifndef QT_NO_DATASTREAM
521 QTimeZone::OffsetData offsetData;
534 offsetData.offsetFromUtc =
data.offsetFromUtc;
535 offsetData.standardTimeOffset =
data.standardTimeOffset;
536 offsetData.daylightTimeOffset =
data.daylightTimeOffset;
537 offsetData.abbreviation =
data.abbreviation;
585 const int MinSectionLength = 1;
586#if defined(Q_OS_ANDROID) || QT_CONFIG(icu)
589 const int MaxSectionLength = 17;
591 const int MaxSectionLength = 14;
593 int sectionLength = 0;
594 for (
const char *
it = ianaId.
begin(), *
const end = ianaId.
end();
it !=
end; ++
it, ++sectionLength) {
597 if (sectionLength < MinSectionLength || sectionLength > MaxSectionLength)
600 }
else if (
ch ==
'-') {
601 if (sectionLength == 0)
614 if (sectionLength < MinSectionLength || sectionLength > MaxSectionLength)
633 if (
mode != QTimeZone::ShortName || secs || mins)
635 if (
mode == QTimeZone::LongName || secs)
647 for (
auto l1 :
data.ids()) {
658 if (
data.windowsId() == windowsId) {
662 return id.toByteArray();
681 if (
data.windowsIdKey == windowsIdKey) {
682 for (
auto l1 :
data.ids())
700 if (
data.windowsIdKey == windowsIdKey &&
data.territory == land) {
701 for (
auto l1 :
data.ids())
724 return id == ianaIds;
757 if (!
id.startsWith(
"UTC") ||
id.
size() < 5)
759 const char signChar =
id.at(3);
760 if (signChar !=
'-' && signChar !=
'+')
762 const int sign = signChar ==
'-' ? -1 : 1;
764 const auto offsets =
id.mid(4).split(
':');
772 unsigned short field =
offset.toUShort(&
ok);
774 if (!
ok || field >= (prior ? 60 : 24))
776 seconds = seconds * 60 + field;
782 return seconds *
sign;
801 m_abbreviation(
other.m_abbreviation),
802 m_comment(
other.m_comment),
803 m_territory(
other.m_territory),
804 m_offsetFromUtc(
other.m_offsetFromUtc)
820 d.abbreviation = m_abbreviation;
821 d.atMSecsSinceEpoch = forMSecsSinceEpoch;
822 d.standardTimeOffset =
d.offsetFromUtc = m_offsetFromUtc;
823 d.daylightTimeOffset = 0;
827void QUtcTimeZonePrivate::init(
const QByteArray &zoneId)
837 m_offsetFromUtc = offsetSeconds;
855 QTimeZone::NameType nameType,
860 if (nameType == QTimeZone::ShortName)
861 return m_abbreviation;
862 else if (nameType == QTimeZone::OffsetName)
870 return m_abbreviation;
876 return m_offsetFromUtc;
913 result <<
id.toByteArray();
935 if (
data.offsetFromUtc == offsetSeconds) {
942 result <<
id.toByteArray();
951#ifndef QT_NO_DATASTREAM
955 << m_abbreviation << static_cast<qint32>(m_territory) << m_comment;
constexpr QByteArrayView sliced(qsizetype pos) const
constexpr QByteArrayView first(qsizetype n) const
qsizetype indexOf(QByteArrayView a, qsizetype from=0) const noexcept
char * data()
\macro QT_NO_CAST_FROM_BYTEARRAY
qsizetype size() const noexcept
Returns the number of bytes in this byte array.
iterator end()
Returns an \l{STL-style iterators}{STL-style iterator} pointing just after the last byte in the byte-...
bool isEmpty() const noexcept
Returns true if the byte array has size 0; otherwise returns false.
iterator begin()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first byte in the byte-array.
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
static QDateTime fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)
qsizetype size() const noexcept
iterator erase(const_iterator begin, const_iterator end)
const_iterator cend() const noexcept
void append(parameter_type t)
const_iterator cbegin() const noexcept
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QByteArray toUtf8() const &
static QString static QString asprintf(const char *format,...) Q_ATTRIBUTE_FORMAT_PRINTF(1
virtual bool hasDaylightTime() const
virtual bool isDaylightTime(qint64 atMSecsSinceEpoch) const
static QByteArray utcQByteArray()
virtual QTimeZonePrivate * clone() const
static QByteArray windowsIdToDefaultIanaId(const QByteArray &windowsId)
virtual Data nextTransition(qint64 afterMSecsSinceEpoch) const
static Data invalidData()
virtual Data data(qint64 forMSecsSinceEpoch) const
virtual bool hasTransitions() const
Data dataForLocalTime(qint64 forLocalMSecs, int hint) const
virtual ~QTimeZonePrivate()
virtual Data previousTransition(qint64 beforeMSecsSinceEpoch) const
virtual QString displayName(qint64 atMSecsSinceEpoch, QTimeZone::NameType nameType, const QLocale &locale) const
bool operator==(const QTimeZonePrivate &other) const
virtual int daylightTimeOffset(qint64 atMSecsSinceEpoch) const
bool operator!=(const QTimeZonePrivate &other) const
static constexpr qint64 invalidMSecs()
virtual bool isTimeZoneIdAvailable(const QByteArray &ianaId) const
virtual QLocale::Territory territory() const
virtual QString comment() const
static constexpr qint64 maxMSecs()
virtual void serialize(QDataStream &ds) const
static QList< QByteArray > windowsIdToIanaIds(const QByteArray &windowsId)
virtual QList< QByteArray > availableTimeZoneIds() const
virtual QString abbreviation(qint64 atMSecsSinceEpoch) const
static QTimeZone::OffsetData toOffsetData(const Data &data)
DataList transitions(qint64 fromMSecsSinceEpoch, qint64 toMSecsSinceEpoch) const
virtual int standardTimeOffset(qint64 atMSecsSinceEpoch) const
static QByteArray ianaIdToWindowsId(const QByteArray &ianaId)
static QString isoOffsetFormat(int offsetFromUtc, QTimeZone::NameType mode=QTimeZone::OffsetName)
static constexpr qint64 minMSecs()
virtual int offsetFromUtc(qint64 atMSecsSinceEpoch) const
static QTimeZone::OffsetData invalidOffsetData()
static constexpr qint64 invalidSeconds()
static QString utcQString()
virtual QByteArray systemTimeZoneId() const
static bool isValidId(const QByteArray &ianaId)
static constexpr int MaxUtcOffsetSecs
static constexpr int MinUtcOffsetSecs
QUtcTimeZonePrivate * clone() const override
int standardTimeOffset(qint64 atMSecsSinceEpoch) const override
QList< QByteArray > availableTimeZoneIds() const override
static qint64 offsetFromUtcString(const QByteArray &id)
bool isTimeZoneIdAvailable(const QByteArray &ianaId) const override
QLocale::Territory territory() const override
QString abbreviation(qint64 atMSecsSinceEpoch) const override
virtual ~QUtcTimeZonePrivate()
Data data(qint64 forMSecsSinceEpoch) const override
void serialize(QDataStream &ds) const override
QString comment() const override
QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType, const QLocale &locale) const override
int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override
QByteArray systemTimeZoneId() const override
QSet< QString >::iterator it
Combined button and popup list for selecting options.
constexpr bool isAsciiDigit(char32_t c) noexcept
constexpr bool isAsciiLower(char32_t c) noexcept
constexpr bool isAsciiUpper(char32_t c) noexcept
static jboolean cut(JNIEnv *, jobject)
constexpr const T & qMin(const T &a, const T &b)
constexpr const T & qMax(const T &a, const T &b)
std::enable_if_t< std::is_unsigned_v< T >, bool > qAddOverflow(T v1, T v2, T *r)
std::enable_if_t< std::is_unsigned_v< T >, bool > qSubOverflow(T v1, T v2, T *r)
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLuint GLintptr offset
GLuint GLsizei const GLuint const GLintptr * offsets
#define QStringLiteral(str)
static QT_BEGIN_NAMESPACE QVariant hint(QPlatformIntegration::StyleHint h)
static bool isEntryInIanaList(QByteArrayView id, QByteArrayView ianaIds)
static quint16 toWindowsIdKey(const QByteArray &winId)
static QByteArray toWindowsIdLiteral(quint16 windowsIdKey)
static constexpr QWindowsData windowsDataTable[]
static constexpr QUtcData utcDataTable[]
static constexpr QZoneData zoneDataTable[]