Commit a07548e9 authored by Alexander Belopolsky's avatar Alexander Belopolsky

Issue #14653: email.utils.mktime_tz() no longer relies on system

mktime() when timezone offest is supplied.
parent 9ed8b4e4
...@@ -13,7 +13,7 @@ __all__ = [ ...@@ -13,7 +13,7 @@ __all__ = [
'quote', 'quote',
] ]
import time import time, calendar
SPACE = ' ' SPACE = ' '
EMPTYSTRING = '' EMPTYSTRING = ''
...@@ -152,13 +152,13 @@ def parsedate(data): ...@@ -152,13 +152,13 @@ def parsedate(data):
def mktime_tz(data): def mktime_tz(data):
"""Turn a 10-tuple as returned by parsedate_tz() into a UTC timestamp.""" """Turn a 10-tuple as returned by parsedate_tz() into a POSIX timestamp."""
if data[9] is None: if data[9] is None:
# No zone info, so localtime is better assumption than GMT # No zone info, so localtime is better assumption than GMT
return time.mktime(data[:8] + (-1,)) return time.mktime(data[:8] + (-1,))
else: else:
t = time.mktime(data[:8] + (0,)) t = calendar.timegm(data)
return t - data[9] - time.timezone return t - data[9]
def quote(str): def quote(str):
......
...@@ -2585,6 +2585,12 @@ class TestMiscellaneous(TestEmailBase): ...@@ -2585,6 +2585,12 @@ class TestMiscellaneous(TestEmailBase):
eq(time.localtime(t)[:6], timetup[:6]) eq(time.localtime(t)[:6], timetup[:6])
eq(int(time.strftime('%Y', timetup[:9])), 2003) eq(int(time.strftime('%Y', timetup[:9])), 2003)
def test_mktime_tz(self):
self.assertEqual(utils.mktime_tz((1970, 1, 1, 0, 0, 0,
-1, -1, -1, 0)), 0)
self.assertEqual(utils.mktime_tz((1970, 1, 1, 0, 0, 0,
-1, -1, -1, 1234)), -1234)
def test_parsedate_y2k(self): def test_parsedate_y2k(self):
"""Test for parsing a date with a two-digit year. """Test for parsing a date with a two-digit year.
......
...@@ -73,6 +73,9 @@ Core and Builtins ...@@ -73,6 +73,9 @@ Core and Builtins
Library Library
------- -------
- Issue #14653: email.utils.mktime_tz() no longer relies on system
mktime() when timezone offest is supplied.
- Fix GzipFile's handling of filenames given as bytes objects. - Fix GzipFile's handling of filenames given as bytes objects.
- Issue #15101: Make pool finalizer avoid joining current thread. - Issue #15101: Make pool finalizer avoid joining current thread.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment