gh-81148: Eliminate unnecessary check in _strptime when determining AM/PM (#13428)
* bpo-36967: Eliminate unnecessary check in _strptime when determining AM/PM * Pauls suggestion to refactor test * Fix test --------- Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com> Co-authored-by: Paul Ganssle <1377457+pganssle@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
85c1ef6477
commit
e3d9bd6be3
@@ -627,18 +627,18 @@ def _strptime(data_string, format="%a %b %d %H:%M:%S %Y"):
|
||||
hour = parse_int(found_dict['I'])
|
||||
ampm = found_dict.get('p', '').lower()
|
||||
# If there was no AM/PM indicator, we'll treat this like AM
|
||||
if ampm in ('', locale_time.am_pm[0]):
|
||||
# We're in AM so the hour is correct unless we're
|
||||
# looking at 12 midnight.
|
||||
# 12 midnight == 12 AM == hour 0
|
||||
if hour == 12:
|
||||
hour = 0
|
||||
elif ampm == locale_time.am_pm[1]:
|
||||
if ampm == locale_time.am_pm[1]:
|
||||
# We're in PM so we need to add 12 to the hour unless
|
||||
# we're looking at 12 noon.
|
||||
# 12 noon == 12 PM == hour 12
|
||||
if hour != 12:
|
||||
hour += 12
|
||||
else:
|
||||
# We're in AM so the hour is correct unless we're
|
||||
# looking at 12 midnight.
|
||||
# 12 midnight == 12 AM == hour 0
|
||||
if hour == 12:
|
||||
hour = 0
|
||||
elif group_key == 'M':
|
||||
minute = parse_int(found_dict['M'])
|
||||
elif group_key == 'S':
|
||||
|
||||
@@ -2942,6 +2942,16 @@ class TestDateTime(TestDate):
|
||||
with self.assertRaises(ValueError): strptime("-000", "%z")
|
||||
with self.assertRaises(ValueError): strptime("z", "%z")
|
||||
|
||||
def test_strptime_ampm(self):
|
||||
dt = datetime(1999, 3, 17, 0, 44, 55, 2)
|
||||
for hour in range(0, 24):
|
||||
with self.subTest(hour=hour):
|
||||
new_dt = dt.replace(hour=hour)
|
||||
dt_str = new_dt.strftime("%I %p")
|
||||
|
||||
self.assertEqual(self.theclass.strptime(dt_str, "%I %p").hour,
|
||||
hour)
|
||||
|
||||
def test_strptime_single_digit(self):
|
||||
# bpo-34903: Check that single digit dates and times are allowed.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user