Fix TZ handling in wxDateTime::ParseRfc822Date().

When the TZ offset specified in the RFC 822 string was equal to the local TZ
offset but the date fell in the DST period, the result was one hour off.

Fix this by converting the date to the UTC explicitly, and then converting it
back to the local TZ to ensure that the DST is taken into effect.

See #15370.
This commit is contained in:
Vadim Zeitlin
2015-02-26 00:52:37 +01:00
parent 0a8ea54125
commit fe7afd273d

View File

@@ -969,7 +969,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;