Qt 6.x
The Qt SDK
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
43 enum Spec {
47 UTC = 2,
49 TimeZone = 4
50 };
51
52 // Daylight Time Status
56 DaylightTime = 1
57 };
58
59 // Status of date/time
61 ShortData = 0x01,
62
63 ValidDate = 0x02,
64 ValidTime = 0x04,
66
68
73 };
74 Q_DECLARE_FLAGS(StatusFlags, StatusFlag)
75
76 enum {
78 };
79
80 struct ZoneState {
81 qint64 when; // ms after zone/local 1970 start; may be revised from the input time.
82 int offset = 0; // seconds
84 // Other fields are set, if possible, even when valid is false due to spring-forward.
85 bool valid = false;
86
87 ZoneState(qint64 local) : when(local) {}
88 ZoneState(qint64 w, int o, DaylightStatus d, bool v = true)
89 : when(w), offset(o), dst(d), valid(v) {}
90 };
91
92 static QDateTime::Data create(QDate toDate, QTime toTime, const QTimeZone &timeZone);
93#if QT_CONFIG(timezone)
94 static ZoneState zoneStateAtMillis(const QTimeZone &zone, qint64 millis, DaylightStatus dst);
95#endif // timezone
96
97 static ZoneState expressUtcAsLocal(qint64 utcMSecs);
98
99 static ZoneState localStateAtMillis(qint64 millis, DaylightStatus dst);
100 static QString localNameAtMillis(qint64 millis, DaylightStatus dst); // empty if unknown
101
106};
107
108Q_DECLARE_OPERATORS_FOR_FLAGS(QDateTimePrivate::StatusFlags)
109
110namespace QtPrivate {
111namespace DateTimeConstants {
112using namespace std::chrono;
113constexpr qint64 SECS_PER_MIN = minutes::period::num;
114constexpr qint64 SECS_PER_HOUR = hours::period::num;
115constexpr qint64 SECS_PER_DAY = SECS_PER_HOUR * 24; // std::chrono::days is C++20
116
117constexpr qint64 MINS_PER_HOUR = std::ratio_divide<hours::period, minutes::period>::num;
118
119constexpr qint64 MSECS_PER_SEC = milliseconds::period::den;
123
124constexpr qint64 JULIAN_DAY_FOR_EPOCH = 2440588; // result of QDate(1970, 1, 1).toJulianDay()
125
126constexpr qint64 JulianDayMax = Q_INT64_C( 784354017364);
127constexpr qint64 JulianDayMin = Q_INT64_C(-784350574879);
128}
129}
130
132
133#endif // QDATETIME_P_H
QTimeZone m_timeZone
QDateTime::ShortData QDateTimeShortData
Definition qdatetime_p.h:38
StatusFlags m_status
QDateTime::Data QDateTimeData
Definition qdatetime_p.h:39
static ZoneState localStateAtMillis(qint64 millis, DaylightStatus dst)
static ZoneState expressUtcAsLocal(qint64 utcMSecs)
static QString localNameAtMillis(qint64 millis, DaylightStatus dst)
\inmodule QtCore \reentrant
Definition qdatetime.h:27
\inmodule QtCore
Definition qshareddata.h:19
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
\inmodule QtCore
Definition qtimezone.h:25
\inmodule QtCore \reentrant
Definition qdatetime.h:189
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_NAMESPACE
@ 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 ISC_DATE toDate(QDate t)
static ISC_TIME toTime(QTime t)
long long qint64
Definition qtypes.h:55
#define Q_INT64_C(c)
Definition qtypes.h:52
view create()
ZoneState(qint64 w, int o, DaylightStatus d, bool v=true)
Definition qdatetime_p.h:88