Commit 79bb05fa authored by Alexander Belopolsky's avatar Alexander Belopolsky

Closes issue #23600: Wrong results from tzinfo.fromutc().

parent d1bf6781
...@@ -180,6 +180,29 @@ class TestTZInfo(unittest.TestCase): ...@@ -180,6 +180,29 @@ class TestTZInfo(unittest.TestCase):
self.assertEqual(derived.utcoffset(None), offset) self.assertEqual(derived.utcoffset(None), offset)
self.assertEqual(derived.tzname(None), oname) self.assertEqual(derived.tzname(None), oname)
def test_issue23600(self):
DSTDIFF = DSTOFFSET = timedelta(hours=1)
class UKSummerTime(tzinfo):
"""Simple time zone which pretends to always be in summer time, since
that's what shows the failure.
"""
def utcoffset(self, dt):
return DSTOFFSET
def dst(self, dt):
return DSTDIFF
def tzname(self, dt):
return 'UKSummerTime'
tz = UKSummerTime()
u = datetime(2014, 4, 26, 12, 1, tzinfo=tz)
t = tz.fromutc(u)
self.assertEqual(t - t.utcoffset(), u)
class TestTimeZone(unittest.TestCase): class TestTimeZone(unittest.TestCase):
def setUp(self): def setUp(self):
......
...@@ -81,6 +81,9 @@ Core and Builtins ...@@ -81,6 +81,9 @@ Core and Builtins
Library Library
------- -------
- Issue #23600: Default implementation of tzinfo.fromutc() was returning
wrong results in some cases.
- Issue #25203: Failed readline.set_completer_delims() no longer left the - Issue #25203: Failed readline.set_completer_delims() no longer left the
module in inconsistent state. module in inconsistent state.
......
...@@ -3040,7 +3040,7 @@ tzinfo_fromutc(PyDateTime_TZInfo *self, PyObject *dt) ...@@ -3040,7 +3040,7 @@ tzinfo_fromutc(PyDateTime_TZInfo *self, PyObject *dt)
goto Fail; goto Fail;
if (dst == Py_None) if (dst == Py_None)
goto Inconsistent; goto Inconsistent;
if (delta_bool(delta) != 0) { if (delta_bool((PyDateTime_Delta *)dst) != 0) {
PyObject *temp = result; PyObject *temp = result;
result = add_datetime_timedelta((PyDateTime_DateTime *)result, result = add_datetime_timedelta((PyDateTime_DateTime *)result,
(PyDateTime_Delta *)dst, 1); (PyDateTime_Delta *)dst, 1);
......
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