- Correct a DST error in date handling.
This commit is contained in:
Paul Beckingham 2014-03-13 21:15:42 -04:00
parent d52eebaa66
commit 065cb2ef01
2 changed files with 25 additions and 19 deletions

View file

@ -633,7 +633,7 @@ void ISO8601d::resolve ()
else if (! offset) else if (! offset)
{ {
#ifdef HAVE_TM_GMTOFF #ifdef HAVE_TM_GMTOFF
offset = local_now->tm_gmtoff; offset = local_now->tm_gmtoff - (local_now->tm_isdst == 1 ? 3600 : 0);
#else #else
// TODO Umm... // TODO Umm...
#endif #endif

View file

@ -91,21 +91,24 @@ int main (int argc, char** argv)
int local_s = (local_now->tm_hour * 3600) + int local_s = (local_now->tm_hour * 3600) +
(local_now->tm_min * 60) + (local_now->tm_min * 60) +
local_now->tm_sec; local_now->tm_sec;
local_now->tm_hour = 0; local_now->tm_hour = 0;
local_now->tm_min = 0; local_now->tm_min = 0;
local_now->tm_sec = 0; local_now->tm_sec = 0;
local_now->tm_isdst = -1;
time_t local = mktime (local_now); time_t local = mktime (local_now);
std::cout << "# local midnight today " << local << "\n"; std::cout << "# local midnight today " << local << "\n";
local_now->tm_year = 2013 - 1900; local_now->tm_year = 2013 - 1900;
local_now->tm_mon = 12 - 1; local_now->tm_mon = 12 - 1;
local_now->tm_mday = 6; local_now->tm_mday = 6;
local_now->tm_isdst = 0;
time_t local6 = mktime (local_now); time_t local6 = mktime (local_now);
std::cout << "# local midnight 2013-12-06 " << local6 << "\n"; std::cout << "# local midnight 2013-12-06 " << local6 << "\n";
local_now->tm_year = 2013 - 1900; local_now->tm_year = 2013 - 1900;
local_now->tm_mon = 12 - 1; local_now->tm_mon = 12 - 1;
local_now->tm_mday = 1; local_now->tm_mday = 1;
local_now->tm_isdst = 0;
time_t local1 = mktime (local_now); time_t local1 = mktime (local_now);
std::cout << "# local midnight 2013-12-01 " << local1 << "\n"; 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) + int utc_s = (utc_now->tm_hour * 3600) +
(utc_now->tm_min * 60) + (utc_now->tm_min * 60) +
utc_now->tm_sec; utc_now->tm_sec;
utc_now->tm_hour = 0; utc_now->tm_hour = 0;
utc_now->tm_min = 0; utc_now->tm_min = 0;
utc_now->tm_sec = 0; utc_now->tm_sec = 0;
utc_now->tm_isdst = -1;
time_t utc = timegm (utc_now); time_t utc = timegm (utc_now);
std::cout << "# utc midnight today " << utc << "\n"; std::cout << "# utc midnight today " << utc << "\n";
utc_now->tm_year = 2013 - 1900; utc_now->tm_year = 2013 - 1900;
utc_now->tm_mon = 12 - 1; utc_now->tm_mon = 12 - 1;
utc_now->tm_mday = 6; utc_now->tm_mday = 6;
utc_now->tm_isdst = 0;
time_t utc6 = timegm (utc_now); time_t utc6 = timegm (utc_now);
std::cout << "# utc midnight 2013-12-06 " << utc6 << "\n"; std::cout << "# utc midnight 2013-12-06 " << utc6 << "\n";
utc_now->tm_year = 2013 - 1900; utc_now->tm_year = 2013 - 1900;
utc_now->tm_mon = 12 - 1; utc_now->tm_mon = 12 - 1;
utc_now->tm_mday = 1; utc_now->tm_mday = 1;
utc_now->tm_isdst = 0;
time_t utc1 = timegm (utc_now); time_t utc1 = timegm (utc_now);
std::cout << "# utc midnight 2013-12-01 " << utc1 << "\n"; std::cout << "# utc midnight 2013-12-01 " << utc1 << "\n";