diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2021-06-01 18:27:48 +0200 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2021-06-23 14:04:08 +0200 |
commit | c00ee2f31013e99c79b820a0db57003c110a5510 (patch) | |
tree | ca5469dd8254a8729ccb1a33eaaedeba21104417 /src/widgets/widgets/qdatetimeedit.cpp | |
parent | 5ad13ec57dc4829813557069806b44000dd836e2 (diff) |
Use UTC when parsing only a date or only a time, not a date-time
This should reduce the amount of fall-out from DST complications.
Also document the assumptions of QDateTimeParser's two fromString()
methods (and fix the punctuation on the QDateTime parameter).
Adjusted some tests to match.
Since only QDateTime-returning methods will show the difference, and
it's at least somewhat odd to be using those on QDateEdit or
QTimeEdit, this should have little impact on API users.
[ChangeLog][QtCore][Behavior Change] QDateEdit and QTimeEdit now
operate in UTC, to avoid spurious complications arising from time-zone
transitions (e.g. DST) causing the implicit other half to combine with
the part being edited to make an invalid result. Returns from their
dateTime() and other methods returning QDateTime (max/min) shall thus
be in UTC where previously they were in local time. QDateTimeEdit
continues using local time. The default can be over-ridden by
setTimeSpec(), as ever.
Change-Id: I44fece004c12342fe536bbe3048217d236fd97b2
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/widgets/widgets/qdatetimeedit.cpp')
-rw-r--r-- | src/widgets/widgets/qdatetimeedit.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp index b150827a4d..81b70b5f90 100644 --- a/src/widgets/widgets/qdatetimeedit.cpp +++ b/src/widgets/widgets/qdatetimeedit.cpp @@ -223,7 +223,9 @@ QDateTimeEdit::QDateTimeEdit(QTime time, QWidget *parent) \internal */ QDateTimeEdit::QDateTimeEdit(const QVariant &var, QMetaType::Type parserType, QWidget *parent) - : QAbstractSpinBox(*new QDateTimeEditPrivate, parent) + : QAbstractSpinBox(*new QDateTimeEditPrivate( + parserType == QMetaType::QDateTime ? Qt::LocalTime : Qt::UTC), + parent) { Q_D(QDateTimeEdit); d->parserType = parserType; @@ -1734,16 +1736,17 @@ QDateEdit::~QDateEdit() */ -QDateTimeEditPrivate::QDateTimeEditPrivate() - : QDateTimeParser(QMetaType::QDateTime, QDateTimeParser::DateTimeEdit, QCalendar()) +QDateTimeEditPrivate::QDateTimeEditPrivate(Qt::TimeSpec timeSpec) + : QDateTimeParser(QMetaType::QDateTime, QDateTimeParser::DateTimeEdit, QCalendar()), + spec(timeSpec) { fixday = true; type = QMetaType::QDateTime; currentSectionIndex = FirstSectionIndex; first.pos = 0; - minimum = QDATETIMEEDIT_COMPAT_DATE_MIN.startOfDay(); - maximum = QDATETIMEEDIT_DATE_MAX.endOfDay(); + minimum = QDATETIMEEDIT_COMPAT_DATE_MIN.startOfDay(spec); + maximum = QDATETIMEEDIT_DATE_MAX.endOfDay(spec); readLocaleSettings(); } |