diff options
author | John Layt <jlayt@kde.org> | 2013-09-02 16:35:25 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-20 23:45:06 +0200 |
commit | 8d6ee59948ef7d56694db0aa9e14212cb1787972 (patch) | |
tree | 5b7e654566a61169c02cd1217611cc65a3c9759d | |
parent | fafc2daf94e46f4e4283abd3acf6613138262c27 (diff) |
QDateTime - Add api for isDaylightTime()
Add new method to return if the current time is Daylight Time.
[ChangeLog][QtCore][QDateTime] Added new method isDaylightTime() to
return if the datetime is in Daylight Time or not.
Change-Id: Icb93fd5dd0b2f7d83d2d4643eeb12922c1137e3e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r-- | src/corelib/tools/qdatetime.cpp | 26 | ||||
-rw-r--r-- | src/corelib/tools/qdatetime.h | 1 | ||||
-rw-r--r-- | tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp | 23 |
3 files changed, 50 insertions, 0 deletions
diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index d87a4c1b67..bfcbe1e050 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -2993,6 +2993,32 @@ QString QDateTime::timeZoneAbbreviation() const } /*! + \since 5.2 + + Returns if this datetime falls in Daylight Savings Time. + + If the Qt::TimeSpec is not Qt::LocalTime then will always + return false. + + \sa timeSpec() +*/ + +bool QDateTime::isDaylightTime() const +{ + switch (d->m_spec) { + case Qt::UTC: + case Qt::OffsetFromUTC: + return false; + case Qt::LocalTime: { + QDateTimePrivate::DaylightStatus status; + localMSecsToEpochMSecs(d->m_msecs, 0, 0, &status, 0); + return (status == QDateTimePrivate::DaylightTime); + } + } + return false; +} + +/*! Sets the date part of this datetime to \a date. If no time is set, it is set to midnight. diff --git a/src/corelib/tools/qdatetime.h b/src/corelib/tools/qdatetime.h index 779aae5b5b..4b97cd797d 100644 --- a/src/corelib/tools/qdatetime.h +++ b/src/corelib/tools/qdatetime.h @@ -223,6 +223,7 @@ public: Qt::TimeSpec timeSpec() const; int offsetFromUtc() const; QString timeZoneAbbreviation() const; + bool isDaylightTime() const; qint64 toMSecsSinceEpoch() const; // ### Qt 6: use quint64 instead of uint diff --git a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp index 2ba0a1a57b..b51fa0095c 100644 --- a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp @@ -143,6 +143,7 @@ private slots: void roundtripGermanLocale() const; void utcOffsetLessThan() const; + void isDaylightTime() const; void daylightTransitions() const; private: @@ -2316,6 +2317,28 @@ void tst_QDateTime::utcOffsetLessThan() const QVERIFY(!(dt2 < dt1)); } +void tst_QDateTime::isDaylightTime() const +{ + QDateTime utc1(QDate(2012, 1, 1), QTime(0, 0, 0), Qt::UTC); + QVERIFY(!utc1.isDaylightTime()); + QDateTime utc2(QDate(2012, 6, 1), QTime(0, 0, 0), Qt::UTC); + QVERIFY(!utc2.isDaylightTime()); + + QDateTime offset1(QDate(2012, 1, 1), QTime(0, 0, 0), Qt::OffsetFromUTC, 1 * 60 * 60); + QVERIFY(!offset1.isDaylightTime()); + QDateTime offset2(QDate(2012, 6, 1), QTime(0, 0, 0), Qt::OffsetFromUTC, 1 * 60 * 60); + QVERIFY(!offset2.isDaylightTime()); + + if (europeanTimeZone) { + QDateTime cet1(QDate(2012, 1, 1), QTime(0, 0, 0)); + QVERIFY(!cet1.isDaylightTime()); + QDateTime cet2(QDate(2012, 6, 1), QTime(0, 0, 0)); + QVERIFY(cet2.isDaylightTime()); + } else { + QSKIP("You must test using Central European (CET/CEST) time zone, e.g. TZ=Europe/Oslo"); + } +} + void tst_QDateTime::daylightTransitions() const { if (europeanTimeZone) { |