dbdede0101
https://github.com/tc39/ecma262/pull/778 was recently merged to Ecma 262. It changes the way to convert between "local time" and UTC in such a way that it'd work for all timezones whether or not there has been any change in the timezone offset of the standard time. For instance, Europe/Moscow and some parts of US state of Indiana have changed the standard (non-DST) timezone offset a few times. The previous spec assumes that the the standard timezone offset is constant, but the new spec take into account the offset change history. In addition, it specifies a new way to calculate the timezone offset during a timezone transition (either in and out of DST or timezone offset shift). During a negative transition (e.g. fall backward / getting out of DST), repeated times are to be interpreted as if the offset before the transition is in effect. During a positive transition (e.g. spring forward / getting into DST), skipped times are to be treated similarly. That is, they are to be interpreted as if the offset before the transition is in effect. With icu-timezone-data, v8 is compliant to the new spec for the past and the future as well as now whether or not the standard timezone offset of a given timezone has changed over time (e.g. Europe/Moscow, Pacific/Apia). With icu-timezone-data, Australia/Lord_Howe (30 minute DST change) also works per spec. Without icu-timezone-data, it works only for timezones of which the standard timezone offset is the same as the current offset (e.g. most North American timezones other than parts of Indiana) and of which the DST shift is an hour. For instance, it doesn't work for Europe/Moscow in 2010 when the standard timezone offset was +4h because the current (2018) standard timezone offset is +3h. Neither does it for Lord Howe in Australia with the DST shift of 0.5 hr. This CL used to require one of the two ICU CLs below, but not any more. https://chromium-review.googlesource.com/c/chromium/deps/icu/+/572652 https://chromium-review.googlesource.com/851265 (a proposed CL to the upstream ICU). Bug: v8:3547,chromium:417640,v8:5714 Cq-Include-Trybots: luci.v8.try:v8_linux_noi18n_rel_ng Change-Id: Ib162295da5bee31b2390bd0918157014aebd3e33 Reviewed-on: https://chromium-review.googlesource.com/572148 Commit-Queue: Jungshik Shin <jshin@chromium.org> Reviewed-by: Daniel Ehrenberg <littledan@chromium.org> Reviewed-by: Michael Lippautz <mlippautz@chromium.org> Cr-Commit-Position: refs/heads/master@{#52332}
49 lines
1.9 KiB
JavaScript
49 lines
1.9 KiB
JavaScript
// Copyright 2018 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --icu-timezone-data
|
|
// Environment Variables: TZ=Pacific/Apia
|
|
|
|
// https://www.timeanddate.com/time/zone/samoa/apia
|
|
|
|
// 2011-09-24T03:00 : UTC-11 => UTC-10
|
|
assertEquals(new Date(Date.UTC(2011, 8, 24, 13, 59)),
|
|
new Date(2011, 8, 24, 2, 59))
|
|
assertEquals(new Date(Date.UTC(2011, 8, 24, 14, 30)),
|
|
new Date(2011, 8, 24, 3, 30));
|
|
assertEquals(new Date(Date.UTC(2011, 8, 24, 14)),
|
|
new Date(2011, 8, 24, 4));
|
|
assertEquals(new Date(Date.UTC(2011, 8, 24, 14, 30)),
|
|
new Date(2011, 8, 24, 4, 30));
|
|
assertEquals((new Date(2011, 8, 24, 4, 30)).getTimezoneOffset(),
|
|
(new Date(2011, 8, 24, 3, 30)).getTimezoneOffset());
|
|
|
|
// 2011-12-30T00:00 : UTC-10 => UTC+14
|
|
// A whole day(2011-12-30; 24 hours) is skipped, but the skipped
|
|
// time is to be interpreted with an offset before the transition.
|
|
assertEquals(new Date(Date.UTC(2011, 11, 30, 9, 59)),
|
|
new Date(2011, 11, 29, 23, 59));
|
|
for (var h = 0; h < 24; ++h) {
|
|
assertEquals(new Date(Date.UTC(2011, 11, 30, h + 10)),
|
|
new Date(2011, 11, 30, h));
|
|
assertEquals(new Date(Date.UTC(2011, 11, 30, h + 10, 30)),
|
|
new Date(2011, 11, 30, h, 30));
|
|
assertEquals(new Date(Date.UTC(2011, 11, 30, h + 10)),
|
|
new Date(2011, 11, 31, h));
|
|
assertEquals(new Date(Date.UTC(2011, 11, 30, h + 10, 30)),
|
|
new Date(2011, 11, 31, h, 30));
|
|
}
|
|
assertEquals(new Date(Date.UTC(2011, 11, 31, 10)),
|
|
new Date(2012, 0, 1, 0));
|
|
|
|
// 2012-04-01T0400: UTC+14 => UTC+13
|
|
assertEquals(new Date(Date.UTC(2012, 2, 31, 13)),
|
|
new Date(2012, 3, 1, 3));
|
|
assertEquals(new Date(Date.UTC(2012, 2, 31, 13, 30)),
|
|
new Date(2012, 3, 1, 3, 30));
|
|
assertEquals(new Date(Date.UTC(2012, 2, 31, 13, 59)),
|
|
new Date(2012, 3, 1, 3, 59))
|
|
assertEquals(new Date(Date.UTC(2012, 2, 31, 15)),
|
|
new Date(2012, 3, 1, 4))
|