Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qdatetime_p.h
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// Copyright (C) 2016 Intel Corporation.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5#ifndef QDATETIME_P_H
6#define QDATETIME_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtCore/private/qglobal_p.h>
20#include "qplatformdefs.h"
21#include "QtCore/qatomic.h"
22#include "QtCore/qdatetime.h"
23#include "QtCore/qshareddata.h"
24#include "QtCore/qtimezone.h"
25
26#if QT_CONFIG(timezone)
27#include "qtimezone.h"
28#endif
29
30#include <chrono>
31
33
35{
36public:
37 // forward the declarations from QDateTime (this makes them public)
38 typedef QDateTime::ShortData QDateTimeShortData;
39 typedef QDateTime::Data QDateTimeData;
40
41 // Never change or delete this enum, it is required for backwards compatible
42 // serialization of QDateTime before 5.2, so is essentially public API
51
52 // Daylight Time Status
58
59 // Status of date/time
74 Q_DECLARE_FLAGS(StatusFlags, StatusFlag)
75
76
78 // Handling of a spring-forward (or other gap):
81 // Handling of a fall-back (or other repeated period):
84 // Quirk for negative DST:
86
89 };
90 Q_DECLARE_FLAGS(TransitionOptions, TransitionOption)
91
92 enum {
94 };
95
96 struct ZoneState {
97 qint64 when; // ms after zone/local 1970 start; may be revised from the input time.
98 int offset = 0; // seconds
100 // Other fields are set, if possible, even when valid is false due to spring-forward.
101 bool valid = false;
102
103 ZoneState(qint64 local) : when(local) {}
104 ZoneState(qint64 w, int o, DaylightStatus d, bool v = true)
105 : when(w), offset(o), dst(d), valid(v) {}
106 };
107
108 static QDateTime::Data create(QDate toDate, QTime toTime, const QTimeZone &timeZone,
110#if QT_CONFIG(timezone)
111 static ZoneState zoneStateAtMillis(const QTimeZone &zone, qint64 millis,
112 TransitionOptions resolve);
113#endif // timezone
114
115 static ZoneState expressUtcAsLocal(qint64 utcMSecs);
116
117 static ZoneState localStateAtMillis(qint64 millis, TransitionOptions resolve);
118 static QString localNameAtMillis(qint64 millis, DaylightStatus dst); // empty if unknown
119
124};
125
126Q_DECLARE_OPERATORS_FOR_FLAGS(QDateTimePrivate::StatusFlags)
127Q_DECLARE_OPERATORS_FOR_FLAGS(QDateTimePrivate::TransitionOptions)
128
129namespace QtPrivate {
130namespace DateTimeConstants {
131using namespace std::chrono;
132constexpr qint64 SECS_PER_MIN = minutes::period::num;
133constexpr qint64 SECS_PER_HOUR = hours::period::num;
134constexpr qint64 SECS_PER_DAY = SECS_PER_HOUR * 24; // std::chrono::days is C++20
135
136constexpr qint64 MINS_PER_HOUR = std::ratio_divide<hours::period, minutes::period>::num;
137
138constexpr qint64 MSECS_PER_SEC = milliseconds::period::den;
142
143constexpr qint64 JULIAN_DAY_FOR_EPOCH = 2440588; // result of QDate(1970, 1, 1).toJulianDay()
144
145constexpr qint64 JulianDayMax = Q_INT64_C( 784354017364);
146constexpr qint64 JulianDayMin = Q_INT64_C(-784350574879);
147}
148}
149
151
152#endif // QDATETIME_P_H
QTimeZone m_timeZone
QDateTime::ShortData QDateTimeShortData
Definition qdatetime_p.h:38
static ZoneState localStateAtMillis(qint64 millis, TransitionOptions resolve)
StatusFlags m_status
QDateTime::Data QDateTimeData
Definition qdatetime_p.h:39
static ZoneState expressUtcAsLocal(qint64 utcMSecs)
static QString localNameAtMillis(qint64 millis, DaylightStatus dst)
TransitionResolution
Definition qdatetime.h:341
\inmodule QtCore \reentrant
Definition qdatetime.h:29
\inmodule QtCore
Definition qshareddata.h:19
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
\inmodule QtCore
Definition qtimezone.h:26
\inmodule QtCore \reentrant
Definition qdatetime.h:215
Combined button and popup list for selecting options.
constexpr qint64 JulianDayMax
constexpr qint64 SECS_PER_HOUR
constexpr qint64 MSECS_PER_MIN
constexpr qint64 SECS_PER_MIN
constexpr qint64 SECS_PER_DAY
constexpr qint64 JulianDayMin
constexpr qint64 MSECS_PER_DAY
constexpr qint64 JULIAN_DAY_FOR_EPOCH
constexpr qint64 MINS_PER_HOUR
constexpr qint64 MSECS_PER_SEC
constexpr qint64 MSECS_PER_HOUR
\macro QT_NO_KEYWORDS >
@ LocalTime
QDateTimePrivate::QDateTimeShortData ShortData
#define Q_DECLARE_FLAGS(Flags, Enum)
Definition qflags.h:174
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
Definition qflags.h:194
GLsizei const GLfloat * v
[13]
GLfloat GLfloat GLfloat w
[0]
GLenum GLenum dst
GLenum GLuint GLintptr offset
static const QQmlJSScope * resolve(const QQmlJSScope *current, const QStringList &names)
static ISC_DATE toDate(QDate t)
static ISC_TIME toTime(QTime t)
long long qint64
Definition qtypes.h:60
#define Q_INT64_C(c)
Definition qtypes.h:57
view create()
ZoneState(qint64 w, int o, DaylightStatus d, bool v=true)