summaryrefslogtreecommitdiffstats
path: root/src/corelib/time/qdatetime.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/time/qdatetime.cpp')
-rw-r--r--src/corelib/time/qdatetime.cpp48
1 files changed, 11 insertions, 37 deletions
diff --git a/src/corelib/time/qdatetime.cpp b/src/corelib/time/qdatetime.cpp
index c1952f9bf5..f881d47284 100644
--- a/src/corelib/time/qdatetime.cpp
+++ b/src/corelib/time/qdatetime.cpp
@@ -90,7 +90,6 @@ enum {
MSECS_PER_HOUR = 3600000,
SECS_PER_MIN = 60,
MSECS_PER_MIN = 60000,
- MSECS_PER_SEC = 1000,
TIME_T_MAX = 2145916799, // int maximum 2037-12-31T23:59:59 UTC
JULIAN_DAY_FOR_EPOCH = 2440588 // result of julianDayFromDate(1970, 1, 1)
};
@@ -4533,7 +4532,7 @@ QString QDateTime::toString(const QString &format, QCalendar cal) const
#endif // datestring
-static inline void massageAdjustedDateTime(QDateTimeData &d, QDate *date, QTime *time)
+static inline void massageAdjustedDateTime(const QDateTimeData &d, QDate *date, QTime *time)
{
/*
If we have just adjusted to a day with a DST transition, our given time
@@ -4548,44 +4547,16 @@ static inline void massageAdjustedDateTime(QDateTimeData &d, QDate *date, QTime
answers do then differ only in DST-ness.)
*/
auto spec = getSpec(d);
- if (spec == Qt::OffsetFromUTC || spec == Qt::UTC) {
- setDateTime(d, *date, *time);
- checkValidDateTime(d);
- return;
- }
- auto dst = extractDaylightStatus(getStatus(d));
- qint64 utc = 0;
- qint64 local = timeToMSecs(*date, *time);
if (spec == Qt::LocalTime) {
- utc = localMSecsToEpochMSecs(local, &dst, date, time);
+ QDateTimePrivate::DaylightStatus status = QDateTimePrivate::UnknownDaylightTime;
+ localMSecsToEpochMSecs(timeToMSecs(*date, *time), &status, date, time);
#if QT_CONFIG(timezone)
} else if (spec == Qt::TimeZone && d.d->m_timeZone.isValid()) {
- utc = QDateTimePrivate::zoneMSecsToEpochMSecs(local, d.d->m_timeZone, dst, date, time);
- // update dst, as it's passed to zoneMSecsToEpochMSecs() by value
- dst = d.d->m_timeZone.isDaylightTime(QDateTime::fromMSecsSinceEpoch(utc))
- ? QDateTimePrivate::DaylightTime : QDateTimePrivate::StandardTime;
+ QDateTimePrivate::zoneMSecsToEpochMSecs(timeToMSecs(*date, *time),
+ d.d->m_timeZone,
+ QDateTimePrivate::UnknownDaylightTime,
+ date, time);
#endif // timezone
- } else {
- dst = QDateTimePrivate::UnknownDaylightTime;
- }
-
- setDateTime(d, *date, *time);
-
- auto status = getStatus(d); // Updated by setDateTime()
- const bool ok = (dst != QDateTimePrivate::UnknownDaylightTime
- && (status & QDateTimePrivate::ValidDate)
- && (status & QDateTimePrivate::ValidTime));
- if (ok)
- status = mergeDaylightStatus(status | QDateTimePrivate::ValidDateTime, dst);
- else
- status &= ~QDateTimePrivate::ValidDateTime;
-
- if (status & QDateTimePrivate::ShortData) {
- d.data.status = status;
- } else {
- d->m_status = status;
- if (ok)
- d->m_offsetFromUtc = (local - utc) / MSECS_PER_SEC;
}
}
@@ -4611,6 +4582,7 @@ QDateTime QDateTime::addDays(qint64 ndays) const
QTime &time = p.second;
date = date.addDays(ndays);
massageAdjustedDateTime(dt.d, &date, &time);
+ setDateTime(dt.d, date, time);
return dt;
}
@@ -4636,6 +4608,7 @@ QDateTime QDateTime::addMonths(int nmonths) const
QTime &time = p.second;
date = date.addMonths(nmonths);
massageAdjustedDateTime(dt.d, &date, &time);
+ setDateTime(dt.d, date, time);
return dt;
}
@@ -4661,6 +4634,7 @@ QDateTime QDateTime::addYears(int nyears) const
QTime &time = p.second;
date = date.addYears(nyears);
massageAdjustedDateTime(dt.d, &date, &time);
+ setDateTime(dt.d, date, time);
return dt;
}
@@ -4680,7 +4654,7 @@ QDateTime QDateTime::addSecs(qint64 s) const
}
/*!
- Returns a QDateTime object containing a datetime \a msecs miliseconds
+ Returns a QDateTime object containing a datetime \a msecs milliseconds
later than the datetime of this object (or earlier if \a msecs is
negative).