summaryrefslogtreecommitdiff
path: root/Lib
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-06-18 11:55:27 -0700
committerGitHub <noreply@github.com>2019-06-18 11:55:27 -0700
commit452b417e34489614b3003b8d08148269096239d5 (patch)
tree9ba681655ebec721b100c147f0b6c5f5ede4684c /Lib
parent624c9a27b10df4355eb2caf04654c730dfa412dd (diff)
downloadcpython-git-452b417e34489614b3003b8d08148269096239d5.tar.gz
bpo-34903: Document that some strptime formats only require 1 digit (GH-14149)
For datetime.datetime.strptime(), the leading zero for some two-digit formats is optional. This adds a footnote to the strftime/strptime documentation to reflect this fact, and adds some tests to ensure that it is true. bpo-34903 (cherry picked from commit 6b9c204ee77a0de87d6f51a3d4547a18604cef9e) Co-authored-by: Mike Gleen <mike.gleen@gmail.com>
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/datetimetester.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
index b9bf49476f..2f8975d8c0 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -2387,6 +2387,7 @@ class TestDateTime(TestDate):
self.assertEqual(expected, got)
strptime = self.theclass.strptime
+
self.assertEqual(strptime("+0002", "%z").utcoffset(), 2 * MINUTE)
self.assertEqual(strptime("-0002", "%z").utcoffset(), -2 * MINUTE)
self.assertEqual(
@@ -2421,6 +2422,40 @@ class TestDateTime(TestDate):
with self.assertRaises(ValueError): strptime("-2400", "%z")
with self.assertRaises(ValueError): strptime("-000", "%z")
+ def test_strptime_single_digit(self):
+ # bpo-34903: Check that single digit dates and times are allowed.
+
+ strptime = self.theclass.strptime
+
+ with self.assertRaises(ValueError):
+ # %y does require two digits.
+ newdate = strptime('01/02/3 04:05:06', '%d/%m/%y %H:%M:%S')
+ dt1 = self.theclass(2003, 2, 1, 4, 5, 6)
+ dt2 = self.theclass(2003, 1, 2, 4, 5, 6)
+ dt3 = self.theclass(2003, 2, 1, 0, 0, 0)
+ dt4 = self.theclass(2003, 1, 25, 0, 0, 0)
+ inputs = [
+ ('%d', '1/02/03 4:5:6', '%d/%m/%y %H:%M:%S', dt1),
+ ('%m', '01/2/03 4:5:6', '%d/%m/%y %H:%M:%S', dt1),
+ ('%H', '01/02/03 4:05:06', '%d/%m/%y %H:%M:%S', dt1),
+ ('%M', '01/02/03 04:5:06', '%d/%m/%y %H:%M:%S', dt1),
+ ('%S', '01/02/03 04:05:6', '%d/%m/%y %H:%M:%S', dt1),
+ ('%j', '2/03 04am:05:06', '%j/%y %I%p:%M:%S',dt2),
+ ('%I', '02/03 4am:05:06', '%j/%y %I%p:%M:%S',dt2),
+ ('%w', '6/04/03', '%w/%U/%y', dt3),
+ # %u requires a single digit.
+ ('%W', '6/4/2003', '%u/%W/%Y', dt3),
+ ('%V', '6/4/2003', '%u/%V/%G', dt4),
+ ]
+ for reason, string, format, target in inputs:
+ reason = 'test single digit ' + reason
+ with self.subTest(reason=reason,
+ string=string,
+ format=format,
+ target=target):
+ newdate = strptime(string, format)
+ self.assertEqual(newdate, target, msg=reason)
+
def test_more_timetuple(self):
# This tests fields beyond those tested by the TestDate.test_timetuple.
t = self.theclass(2004, 12, 31, 6, 22, 33)