From: Antoine Pitrou Date: Thu, 10 May 2012 18:17:46 +0000 (+0200) Subject: Issue #14157: Fix time.strptime failing without a year on February 29th. X-Git-Tag: v2.7.4rc1~837 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c2b714ce216bb0c844e3d4c3440937b82a924e3d;p=python Issue #14157: Fix time.strptime failing without a year on February 29th. Patch by Hynek Schlawack. --- diff --git a/Lib/_strptime.py b/Lib/_strptime.py index d9563b9e2b..720fea851e 100644 --- a/Lib/_strptime.py +++ b/Lib/_strptime.py @@ -326,7 +326,8 @@ def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"): if len(data_string) != found.end(): raise ValueError("unconverted data remains: %s" % data_string[found.end():]) - year = 1900 + + year = None month = day = 1 hour = minute = second = fraction = 0 tz = -1 @@ -425,6 +426,10 @@ def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"): else: tz = value break + if year is None and month == 2 and day == 29: + year = 1904 # 1904 is first leap year of 20th century + elif year is None: + year = 1900 # If we know the week of the year and what day of that week, we can figure # out the Julian day of the year. if julian == -1 and week_of_year != -1 and weekday != -1: diff --git a/Lib/test/test_strptime.py b/Lib/test/test_strptime.py index 14927d738c..2d157f0ee2 100644 --- a/Lib/test/test_strptime.py +++ b/Lib/test/test_strptime.py @@ -378,6 +378,9 @@ class StrptimeTests(unittest.TestCase): need_escaping = ".^$*+?{}\[]|)(" self.assertTrue(_strptime._strptime_time(need_escaping, need_escaping)) + def test_feb29_on_leap_year_without_year(self): + time.strptime("Feb 29", "%b %d") + class Strptime12AMPMTests(unittest.TestCase): """Test a _strptime regression in '%I %p' at 12 noon (12 PM)""" diff --git a/Misc/NEWS b/Misc/NEWS index 7dbeb9e229..63cdad9507 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -60,6 +60,9 @@ Core and Builtins Library ------- +- Issue #14157: Fix time.strptime failing without a year on February 29th. + Patch by Hynek Schlawack. + - Issue #14768: os.path.expanduser('~/a') doesn't works correctly when HOME is '/'. - Issue #13183: Fix pdb skipping frames after hitting a breakpoint and running