- 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)
{
#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

View file

@ -94,18 +94,21 @@ int main (int argc, char** argv)
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_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_isdst = 0;
time_t local1 = mktime (local_now);
std::cout << "# local midnight 2013-12-01 " << local1 << "\n";
@ -116,18 +119,21 @@ int main (int argc, char** argv)
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_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_isdst = 0;
time_t utc1 = timegm (utc_now);
std::cout << "# utc midnight 2013-12-01 " << utc1 << "\n";