diff --git a/src/corelib/time/qdatetime.cpp b/src/corelib/time/qdatetime.cpp index a61a7d5706..faf3fe38de 100644 --- a/src/corelib/time/qdatetime.cpp +++ b/src/corelib/time/qdatetime.cpp @@ -3050,7 +3050,9 @@ static void setDateTime(QDateTimeData &d, QDate date, QTime time) if (mul_overflow(days, std::integral_constant(), &msecs) || add_overflow(msecs, qint64(ds), &msecs)) { newStatus = QDateTimePrivate::StatusFlags{}; - } else if (d.isShort()) { + msecs = 0; + } + if (d.isShort()) { // let's see if we can keep this short if (msecsCanBeSmall(msecs)) { // yes, we can diff --git a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp index 166ce260a5..ce0e899a25 100644 --- a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp @@ -717,6 +717,13 @@ void tst_QDateTime::setMSecsSinceEpoch() QDateTime reference(QDate(1970, 1, 1), QTime(0, 0), Qt::UTC); QCOMPARE(dt, reference.addMSecs(msecs)); + + if ((localTimeType == LocalTimeAheadOfUtc && msecs == std::numeric_limits::max()) + || (localTimeType == LocalTimeBehindUtc && msecs == std::numeric_limits::min())) { + QDateTime curt = QDate(1970, 1, 1).startOfDay(); // initially in short-form + curt.setMSecsSinceEpoch(msecs); // Overflows due to offset + QVERIFY(!curt.isValid()); + } } void tst_QDateTime::fromMSecsSinceEpoch_data()