mirror of
https://github.com/python/cpython.git
synced 2025-08-02 08:02:56 +00:00
Closes issue #23600: Wrong results from tzinfo.fromutc().
This commit is contained in:
parent
87d0066f1a
commit
c79447b267
3 changed files with 27 additions and 1 deletions
|
@ -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
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #23600: Default implementation of tzinfo.fromutc() was returning
|
||||||
|
wrong results in some cases.
|
||||||
|
|
||||||
- Prevent overflow in _Unpickler_Read.
|
- Prevent overflow in _Unpickler_Read.
|
||||||
|
|
||||||
- Issue #25047: The XML encoding declaration written by Element Tree now
|
- Issue #25047: The XML encoding declaration written by Element Tree now
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue