2009-06-18 Gavin Barraclough <barraclough@apple.com>
Reviewed by Geoff Garen.
Timezone calculation incorrect in Venezuela.
https://bugs.webkit.org/show_bug.cgi?id=26531
<rdar://problem/6646169> Time is incorrectly reported to JavaScript in both Safari 3 and Firefox 3
The problem is that we're calculating the timezone relative to 01/01/2000,
but the VET timezone changed from -4 hours to -4:30 hours on 12/09/2007.
According to the spec, section 15.9.1.9 states "the time since the beginning
of the year", presumably meaning the *current* year. Change the calculation
to be based on whatever the current year is, rather than a canned date.
No performance impact.
* wtf/DateMath.cpp:
(WTF::calculateUTCOffset):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@44842 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/JavaScriptCore/wtf/DateMath.cpp b/JavaScriptCore/wtf/DateMath.cpp
index a43a0bc..3f49d5a 100644
--- a/JavaScriptCore/wtf/DateMath.cpp
+++ b/JavaScriptCore/wtf/DateMath.cpp
@@ -361,13 +361,23 @@
static int32_t calculateUTCOffset()
{
+ time_t localTime = time(0);
tm localt;
- memset(&localt, 0, sizeof(localt));
-
- // get the difference between this time zone and UTC on Jan 01, 2000 12:00:00 AM
+ getLocalTime(&localTime, &localt);
+
+ // Get the difference between this time zone and UTC on the 1st of January of this year.
+ localt.tm_sec = 0;
+ localt.tm_min = 0;
+ localt.tm_hour = 0;
localt.tm_mday = 1;
- localt.tm_year = 100;
- time_t utcOffset = 946684800 - mktime(&localt);
+ localt.tm_mon = 0;
+ // Not setting localt.tm_year!
+ localt.tm_wday = 0;
+ localt.tm_yday = 0;
+ localt.tm_isdst = 0;
+ localt.tm_zone = 0;
+ localt.tm_gmtoff = 0;
+ time_t utcOffset = timegm(&localt) - mktime(&localt);
return static_cast<int32_t>(utcOffset * 1000);
}