diff -r 430af393d8f1 Lib/test/datetimetester.py --- a/Lib/test/datetimetester.py Wed Mar 23 18:45:55 2016 +0100 +++ b/Lib/test/datetimetester.py Wed Mar 23 14:24:12 2016 -0400 @@ -3463,6 +3463,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 -r 430af393d8f1 Modules/_datetimemodule.c --- a/Modules/_datetimemodule.c Wed Mar 23 18:45:55 2016 +0100 +++ b/Modules/_datetimemodule.c Wed Mar 23 14:24:12 2016 -0400 @@ -4753,7 +4753,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);