From 065cb2ef0149c6d9aebb703ec92c6d23d5049eb4 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Thu, 13 Mar 2014 21:15:42 -0400 Subject: [PATCH] Bug - Correct a DST error in date handling. --- src/ISO8601.cpp | 2 +- test/iso8601d.t.cpp | 42 ++++++++++++++++++++++++------------------ 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/ISO8601.cpp b/src/ISO8601.cpp index fe610118f..118a13c3a 100644 --- a/src/ISO8601.cpp +++ b/src/ISO8601.cpp @@ -633,7 +633,7 @@ void ISO8601d::resolve () else if (! offset) { #ifdef HAVE_TM_GMTOFF - offset = local_now->tm_gmtoff; + offset = local_now->tm_gmtoff - (local_now->tm_isdst == 1 ? 3600 : 0); #else // TODO Umm... #endif diff --git a/test/iso8601d.t.cpp b/test/iso8601d.t.cpp index e5d27b1a5..ddbcee8c4 100644 --- a/test/iso8601d.t.cpp +++ b/test/iso8601d.t.cpp @@ -91,21 +91,24 @@ int main (int argc, char** argv) int local_s = (local_now->tm_hour * 3600) + (local_now->tm_min * 60) + local_now->tm_sec; - local_now->tm_hour = 0; - local_now->tm_min = 0; - local_now->tm_sec = 0; + local_now->tm_hour = 0; + local_now->tm_min = 0; + local_now->tm_sec = 0; + local_now->tm_isdst = -1; time_t local = mktime (local_now); std::cout << "# local midnight today " << local << "\n"; - local_now->tm_year = 2013 - 1900; - local_now->tm_mon = 12 - 1; - local_now->tm_mday = 6; + local_now->tm_year = 2013 - 1900; + local_now->tm_mon = 12 - 1; + local_now->tm_mday = 6; + local_now->tm_isdst = 0; time_t local6 = mktime (local_now); std::cout << "# local midnight 2013-12-06 " << local6 << "\n"; - local_now->tm_year = 2013 - 1900; - local_now->tm_mon = 12 - 1; - local_now->tm_mday = 1; + local_now->tm_year = 2013 - 1900; + local_now->tm_mon = 12 - 1; + local_now->tm_mday = 1; + local_now->tm_isdst = 0; time_t local1 = mktime (local_now); std::cout << "# local midnight 2013-12-01 " << local1 << "\n"; @@ -113,21 +116,24 @@ int main (int argc, char** argv) int utc_s = (utc_now->tm_hour * 3600) + (utc_now->tm_min * 60) + utc_now->tm_sec; - utc_now->tm_hour = 0; - utc_now->tm_min = 0; - utc_now->tm_sec = 0; + utc_now->tm_hour = 0; + utc_now->tm_min = 0; + utc_now->tm_sec = 0; + utc_now->tm_isdst = -1; time_t utc = timegm (utc_now); std::cout << "# utc midnight today " << utc << "\n"; - utc_now->tm_year = 2013 - 1900; - utc_now->tm_mon = 12 - 1; - utc_now->tm_mday = 6; + utc_now->tm_year = 2013 - 1900; + utc_now->tm_mon = 12 - 1; + utc_now->tm_mday = 6; + utc_now->tm_isdst = 0; time_t utc6 = timegm (utc_now); std::cout << "# utc midnight 2013-12-06 " << utc6 << "\n"; - utc_now->tm_year = 2013 - 1900; - utc_now->tm_mon = 12 - 1; - utc_now->tm_mday = 1; + utc_now->tm_year = 2013 - 1900; + utc_now->tm_mon = 12 - 1; + utc_now->tm_mday = 1; + utc_now->tm_isdst = 0; time_t utc1 = timegm (utc_now); std::cout << "# utc midnight 2013-12-01 " << utc1 << "\n";