summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Layt <jlayt@kde.org>2013-09-02 16:35:25 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-20 23:45:06 +0200
commit8d6ee59948ef7d56694db0aa9e14212cb1787972 (patch)
tree5b7e654566a61169c02cd1217611cc65a3c9759d
parentfafc2daf94e46f4e4283abd3acf6613138262c27 (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.cpp26
-rw-r--r--src/corelib/tools/qdatetime.h1
-rw-r--r--tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp23
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) {