From 59905ac618204b8d61de317b6a0a9bc6e15b7996 Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Fri, 18 Mar 2016 16:09:24 -0600 Subject: [PATCH] Fixing conversion between DateTime and QDateTime [#115395007] --- .../src/utilities/time/DateTime.cpp | 8 +++-- .../utilities/time/Test/DateTime_GTest.cpp | 31 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/openstudiocore/src/utilities/time/DateTime.cpp b/openstudiocore/src/utilities/time/DateTime.cpp index bac4209e6e7..0589e1dc99e 100644 --- a/openstudiocore/src/utilities/time/DateTime.cpp +++ b/openstudiocore/src/utilities/time/DateTime.cpp @@ -333,8 +333,10 @@ DateTime toDateTime(const QDateTime &qdt) { Date d = Date::fromDayOfYear(qdt.date().dayOfYear(), qdt.date().year()); Time t(0, qdt.time().hour(), qdt.time().minute(), qdt.time().second()); + int secondsFromUtc = qdt.offsetFromUtc(); + double utcOffset = secondsFromUtc * HOURS_PER_SECOND; - return DateTime(d, t, DateTime::localOffsetUTC()); + return DateTime(d, t, utcOffset); } QDateTime toQDateTime(const DateTime& dt) { @@ -344,7 +346,9 @@ QDateTime toQDateTime(const DateTime& dt) { dt.date().dayOfMonth()), QTime(dt.time().hours(), dt.time().minutes(), - dt.time().seconds()) + dt.time().seconds()), + Qt::OffsetFromUTC, + dt.utcOffset() * SECONDS_PER_MINUTE * MINUTES_PER_HOUR ); } diff --git a/openstudiocore/src/utilities/time/Test/DateTime_GTest.cpp b/openstudiocore/src/utilities/time/Test/DateTime_GTest.cpp index 606cf604f17..e93a7c72d12 100644 --- a/openstudiocore/src/utilities/time/Test/DateTime_GTest.cpp +++ b/openstudiocore/src/utilities/time/Test/DateTime_GTest.cpp @@ -22,6 +22,8 @@ #include "../DateTime.hpp" #include "../../core/Exception.hpp" +#include + #include using namespace std; @@ -170,6 +172,35 @@ TEST(DateTime,EpochConversions) { EXPECT_EQ(dateTime,copy); } +TEST(DateTime, QDateTime) { + { + DateTime dateTime = DateTime::now(); + QDateTime qDateTime = toQDateTime(dateTime); + DateTime dateTime2 = toDateTime(qDateTime); + EXPECT_EQ(dateTime, dateTime2); + } + { + DateTime dateTime = DateTime::nowUTC(); + QDateTime qDateTime = toQDateTime(dateTime); + DateTime dateTime2 = toDateTime(qDateTime); + EXPECT_EQ(dateTime, dateTime2); + } + { + QDateTime qDateTime = QDateTime::currentDateTime(); + DateTime dateTime = toDateTime(qDateTime); + QDateTime qDateTime2 = toQDateTime(dateTime); + EXPECT_EQ(qDateTime.toTime_t(), qDateTime2.toTime_t()); + } + { + QDateTime qDateTime = QDateTime::currentDateTimeUtc(); + DateTime dateTime = toDateTime(qDateTime); + QDateTime qDateTime2 = toQDateTime(dateTime); + EXPECT_EQ(qDateTime.toTime_t(), qDateTime2.toTime_t()); + } +} + + + TEST(DateTime,ISO8601Conversions) { { DateTime dateTime = DateTime::now();