]> granicus.if.org Git - python/commitdiff
Fix julian day problem with strptime. Note: XXX about using 0, suggestions?
authorNeal Norwitz <nnorwitz@gmail.com>
Thu, 26 Dec 2002 16:19:52 +0000 (16:19 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Thu, 26 Dec 2002 16:19:52 +0000 (16:19 +0000)
Lib/_strptime.py
Lib/test/test_strptime.py

index 896c05036627777a3e0411dc65f7d307e8ef9605..b7f75779d7d47faf02b237e11bce723d924f3fe8 100644 (file)
@@ -306,12 +306,14 @@ class TimeRE(dict):
 
     def __init__(self, locale_time=LocaleTime()):
         """Init inst with non-locale regexes and store LocaleTime object."""
+        # XXX: should 0 be valid for:
+        #          day (d), julian day (j), month (m), and hour12 (I)?
         super(TimeRE,self).__init__({
             # The " \d" option is to make %c from ANSI C work
             'd': r"(?P<d>3[0-1]|[0-2]\d|\d| \d)",
             'H': r"(?P<H>2[0-3]|[0-1]\d|\d)",
             'I': r"(?P<I>0\d|1[0-2]|\d)",
-            'j': r"(?P<j>(?:3[0-5]\d|6[0-6])|[0-2]\d\d|\d)",
+            'j': r"(?P<j>(?:3[0-5]\d|36[0-6])|[0-2]\d\d|\d\d|\d)",
             'm': r"(?P<m>0\d|1[0-2]|\d)",
             'M': r"(?P<M>[0-5]\d|\d)",
             'S': r"(?P<S>6[0-1]|[0-5]\d|\d)",
index a66b54ac976618ab0547991272b5d3aae45fa8ba..83c03b484ff1fd3159f43cc14c19c5e7d0b5ce73 100644 (file)
@@ -379,6 +379,17 @@ class Strptime12AMPMTests(unittest.TestCase):
         eq(_strptime.strptime('12 AM', '%I %p')[3], 0)
 
 
+class JulianTests(unittest.TestCase):
+    """Test a _strptime regression that all julian (1-366) are accepted"""
+
+    def test_all_julian_days(self):
+        eq = self.assertEqual
+        # XXX: should 0 be accepted?
+        for i in range(1, 367):
+            # use 2004, since it is a leap year, we have 366 days
+            eq(_strptime.strptime('%d 2004' % i, '%j %Y')[7], i)
+
+
 def test_main():
     suite = unittest.TestSuite()
     suite.addTest(unittest.makeSuite(LocaleTime_Tests))
@@ -386,6 +397,7 @@ def test_main():
     suite.addTest(unittest.makeSuite(StrptimeTests))
     suite.addTest(unittest.makeSuite(FxnTests))
     suite.addTest(unittest.makeSuite(Strptime12AMPMTests))
+    suite.addTest(unittest.makeSuite(JulianTests))
     test_support.run_suite(suite)