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':
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.