From 1823ae012acf3122b9a07ad9a8940f3db121d789 Mon Sep 17 00:00:00 2001 From: "ulan@chromium.org" Date: Tue, 2 Sep 2014 11:54:08 +0000 Subject: [PATCH] Fix Date DST computation. BUG=v8:3116 LOG=N R=rossberg@chromium.org Review URL: https://codereview.chromium.org/525363002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23606 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/date.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/date.h b/src/date.h index 633dd9f..2e5ce39 100644 --- a/src/date.h +++ b/src/date.h @@ -103,14 +103,22 @@ class DateCache { } // ECMA 262 - 15.9.1.9 + // LocalTime(t) = t + LocalTZA + DaylightSavingTA(t) + // ECMA 262 assumes that DaylightSavingTA is computed using UTC time, + // but we fetch DST from OS using local time, therefore we need: + // LocalTime(t) = t + LocalTZA + DaylightSavingTA(t + LocalTZA). int64_t ToLocal(int64_t time_ms) { - return time_ms + LocalOffsetInMs() + DaylightSavingsOffsetInMs(time_ms); + time_ms += LocalOffsetInMs(); + return time_ms + DaylightSavingsOffsetInMs(time_ms); } // ECMA 262 - 15.9.1.9 + // UTC(t) = t - LocalTZA - DaylightSavingTA(t - LocalTZA) + // ECMA 262 assumes that DaylightSavingTA is computed using UTC time, + // but we fetch DST from OS using local time, therefore we need: + // UTC(t) = t - LocalTZA - DaylightSavingTA(t). int64_t ToUTC(int64_t time_ms) { - time_ms -= LocalOffsetInMs(); - return time_ms - DaylightSavingsOffsetInMs(time_ms); + return time_ms - LocalOffsetInMs() - DaylightSavingsOffsetInMs(time_ms); } -- 2.7.4