summaryrefslogtreecommitdiffstats
path: root/src/corelib/time/qdatetime_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/time/qdatetime_p.h')
-rw-r--r--src/corelib/time/qdatetime_p.h36
1 files changed, 26 insertions, 10 deletions
diff --git a/src/corelib/time/qdatetime_p.h b/src/corelib/time/qdatetime_p.h
index de4de85d8c..02b047dd73 100644
--- a/src/corelib/time/qdatetime_p.h
+++ b/src/corelib/time/qdatetime_p.h
@@ -21,6 +21,7 @@
#include "QtCore/qatomic.h"
#include "QtCore/qdatetime.h"
#include "QtCore/qshareddata.h"
+#include "QtCore/qtimezone.h"
#if QT_CONFIG(timezone)
#include "qtimezone.h"
@@ -62,7 +63,6 @@ public:
ValidDate = 0x02,
ValidTime = 0x04,
ValidDateTime = 0x08,
- ValidWhenMask = ValidDate | ValidTime | ValidDateTime,
TimeSpecMask = 0x30,
@@ -73,6 +73,22 @@ public:
};
Q_DECLARE_FLAGS(StatusFlags, StatusFlag)
+
+ enum TransitionOption {
+ // Handling of a spring-forward (or other gap):
+ GapUseBefore = 2,
+ GapUseAfter = 4,
+ // Handling of a fall-back (or other repeated period):
+ FoldUseBefore = 0x20,
+ FoldUseAfter = 0x40,
+ // Quirk for negative DST:
+ FlipForReverseDst = 0x400,
+
+ GapMask = GapUseBefore | GapUseAfter,
+ FoldMask = FoldUseBefore | FoldUseAfter,
+ };
+ Q_DECLARE_FLAGS(TransitionOptions, TransitionOption)
+
enum {
TimeSpecShift = 4,
};
@@ -89,29 +105,26 @@ public:
: when(w), offset(o), dst(d), valid(v) {}
};
- static QDateTime::Data create(QDate toDate, QTime toTime, Qt::TimeSpec toSpec,
- int offsetSeconds);
-
+ static QDateTime::Data create(QDate toDate, QTime toTime, const QTimeZone &timeZone,
+ QDateTime::TransitionResolution resolve);
#if QT_CONFIG(timezone)
- static QDateTime::Data create(QDate toDate, QTime toTime, const QTimeZone & timeZone);
-
- static ZoneState zoneStateAtMillis(const QTimeZone &zone, qint64 millis, DaylightStatus dst);
+ static ZoneState zoneStateAtMillis(const QTimeZone &zone, qint64 millis,
+ TransitionOptions resolve);
#endif // timezone
static ZoneState expressUtcAsLocal(qint64 utcMSecs);
- static ZoneState localStateAtMillis(qint64 millis, DaylightStatus dst);
+ static ZoneState localStateAtMillis(qint64 millis, TransitionOptions resolve);
static QString localNameAtMillis(qint64 millis, DaylightStatus dst); // empty if unknown
StatusFlags m_status = StatusFlag(Qt::LocalTime << TimeSpecShift);
qint64 m_msecs = 0;
int m_offsetFromUtc = 0;
-#if QT_CONFIG(timezone)
QTimeZone m_timeZone;
-#endif // timezone
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QDateTimePrivate::StatusFlags)
+Q_DECLARE_OPERATORS_FOR_FLAGS(QDateTimePrivate::TransitionOptions)
namespace QtPrivate {
namespace DateTimeConstants {
@@ -128,6 +141,9 @@ constexpr qint64 MSECS_PER_HOUR = SECS_PER_HOUR * MSECS_PER_SEC;
constexpr qint64 MSECS_PER_DAY = SECS_PER_DAY * MSECS_PER_SEC;
constexpr qint64 JULIAN_DAY_FOR_EPOCH = 2440588; // result of QDate(1970, 1, 1).toJulianDay()
+
+constexpr qint64 JulianDayMax = Q_INT64_C( 784354017364);
+constexpr qint64 JulianDayMin = Q_INT64_C(-784350574879);
}
}