Skip to content

Commit 3b5846a

Browse files
committed
fix test_time failure in non-DST time zones
Fixes: emscripten-core#5617
1 parent 5d18b58 commit 3b5846a

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

AUTHORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,3 +312,4 @@ a license to everyone to use it as detailed in LICENSE.)
312312
* Zhiming Wang <[email protected]>
313313
* Jameson Ernst <[email protected]>
314314
* Yoan Lecoq <[email protected]>
315+
* Jiajie Hu <[email protected]> (copyright owned by Intel Corporation)

src/library.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1913,7 +1913,8 @@ LibraryManager.library = {
19131913
var winterOffset = start.getTimezoneOffset();
19141914
var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South
19151915
if (dst < 0) {
1916-
{{{ makeSetValue('tmPtr', C_STRUCTS.tm.tm_isdst, 'Number(dstOffset == guessedOffset)', 'i32') }}};
1916+
// Attention: some regions don't have DST at all.
1917+
{{{ makeSetValue('tmPtr', C_STRUCTS.tm.tm_isdst, 'Number(summerOffset != winterOffset && dstOffset == guessedOffset)', 'i32') }}};
19171918
} else if ((dst > 0) != (dstOffset == guessedOffset)) {
19181919
var nonDstOffset = Math.max(winterOffset, summerOffset);
19191920
var trueOffset = dst > 0 ? dstOffset : nonDstOffset;
@@ -1995,10 +1996,10 @@ LibraryManager.library = {
19951996
{{{ makeSetValue('tmPtr', C_STRUCTS.tm.tm_yday, 'yday', 'i32') }}};
19961997
{{{ makeSetValue('tmPtr', C_STRUCTS.tm.tm_gmtoff, '-(date.getTimezoneOffset() * 60)', 'i32') }}};
19971998

1998-
// DST is in December in South
1999+
// Attention: DST is in December in South, and some regions don't have DST at all.
19992000
var summerOffset = new Date(2000, 6, 1).getTimezoneOffset();
20002001
var winterOffset = start.getTimezoneOffset();
2001-
var dst = (date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0;
2002+
var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0;
20022003
{{{ makeSetValue('tmPtr', C_STRUCTS.tm.tm_isdst, 'dst', 'i32') }}};
20032004

20042005
var zonePtr = {{{ makeGetValue(makeGlobalUse('_tzname'), 'dst ? Runtime.QUANTUM_SIZE : 0', 'i32') }}};

tests/test_core.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2083,7 +2083,17 @@ def test_tcgetattr(self):
20832083
def test_time(self):
20842084
src = open(path_from_root('tests', 'time', 'src.cpp'), 'r').read()
20852085
expected = open(path_from_root('tests', 'time', 'output.txt'), 'r').read()
2086-
self.do_run(src, expected);
2086+
self.do_run(src, expected)
2087+
try:
2088+
for tz in ['EST+05EDT', 'UTC+0']:
2089+
# Run the test with different time zone settings if
2090+
# possible. It seems that the TZ environment variable does not
2091+
# work all the time (at least it's not well respected by
2092+
# Node.js on Windows), but it does no harm either.
2093+
os.environ['TZ'] = tz
2094+
self.do_run(src, expected)
2095+
finally:
2096+
del os.environ['TZ']
20872097

20882098
def test_timeb(self):
20892099
# Confirms they are called in reverse order

0 commit comments

Comments
 (0)