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:
@@ -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):
|
||||
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user