[Python-checkins] cpython (3.5): Issue#26616:Fixed a bug in datetime.astimezone() method.

alexander.belopolsky python-checkins at python.org
Fri Mar 25 15:47:36 EDT 2016


https://hg.python.org/cpython/rev/361a92204d4a
changeset: 100752:361a92204d4a
branch: 3.5
parent: 100747:ce7fdd69ba2c
user: Alexander Belopolsky <alexander.belopolsky at gmail.com>
date: Fri Mar 25 15:42:59 2016 -0400
summary:
 Issue#26616:Fixed a bug in datetime.astimezone() method.
files:
 Lib/test/datetimetester.py | 8 ++++++++
 Misc/NEWS | 2 ++
 Modules/_datetimemodule.c | 7 ++++++-
 3 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -3426,6 +3426,14 @@
 self.assertEqual(dt, local)
 self.assertEqual(local.strftime("%z %Z"), "-0400 EDT")
 
+ @support.run_with_tz('EST+05EDT,M3.2.0,M11.1.0')
+ def test_astimezone_default_near_fold(self):
+ # Issue #26616.
+ u = datetime(2015, 11, 1, 5, tzinfo=timezone.utc)
+ t = u.astimezone()
+ s = t.astimezone()
+ self.assertEqual(t.tzinfo, s.tzinfo)
+
 def test_aware_subtract(self):
 cls = self.theclass
 
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -94,6 +94,8 @@
 Library
 -------
 
+- Issue #26616: Fixed a bug in datetime.astimezone() method.
+
 - Issue #21925: :func:`warnings.formatwarning` now catches exceptions on
 ``linecache.getline(...)`` to be able to log :exc:`ResourceWarning` emitted
 late during the Python shutdown process.
diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c
--- a/Modules/_datetimemodule.c
+++ b/Modules/_datetimemodule.c
@@ -4749,7 +4749,12 @@
 PyObject *nameo = NULL;
 const char *zone = NULL;
 
- delta = datetime_subtract((PyObject *)utc_time, PyDateTime_Epoch);
+ delta = new_delta(ymd_to_ord(GET_YEAR(utc_time), GET_MONTH(utc_time),
+ GET_DAY(utc_time)) - 719163,
+ 60 * (60 * DATE_GET_HOUR(utc_time) +
+ DATE_GET_MINUTE(utc_time)) +
+ DATE_GET_SECOND(utc_time),
+ 0, 0);
 if (delta == NULL)
 return NULL;
 one_second = new_delta(0, 1, 0, 0);
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /