diff --git a/docs/changes.txt b/docs/changes.txt index 8b953d7ae2..66bbbf592e 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -580,6 +580,7 @@ Major new features in this release Unix: - Fix wxIPaddress::Hostname() failing if /etc/hosts contained very long names. +- Fix wxDateTime::ParseRfc822Date() for some TZ/DST combinations. All (GUI): diff --git a/src/common/datetimefmt.cpp b/src/common/datetimefmt.cpp index 137439f27e..6dc2968dae 100644 --- a/src/common/datetimefmt.cpp +++ b/src/common/datetimefmt.cpp @@ -996,7 +996,14 @@ wxDateTime::ParseRfc822Date(const wxString& date, wxString::const_iterator *end) // the spec was correct, construct the date from the values we found Set(day, mon, year, hour, min, sec); - MakeFromTimezone(TimeZone::Make(offset*SEC_PER_MIN)); + + // As always, dealing with the time zone is the most interesting part: we + // can't just use MakeFromTimeZone() here because it wouldn't handle the + // DST correctly because the TZ specified in the string is DST-invariant + // and so we have to manually shift to the UTC first and then convert to + // the local TZ. + *this -= wxTimeSpan::Minutes(offset); + MakeFromUTC(); if ( end ) *end = p;