%y
соответствует году с двумя цифрами, опуская век. Ваш ввод имеет четырехзначный год, поэтому вам нужно использовать %Y
:
'%d/%m/%Y %I:%M %p'
В случае сомнений используйте datetime.strptime()
с подстрокой вашего ввода, чтобы вы могли увидеть, какие части работают, а какие нет:
>>> import datetime
>>> datetime.datetime.strptime('1', '%d')
datetime.datetime(1900, 1, 1, 0, 0)
>>> datetime.datetime.strptime('1/08', '%d/%m')
datetime.datetime(1900, 8, 1, 0, 0)
>>> datetime.datetime.strptime('1/08/2018', '%d/%m/%y')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.7/_strptime.py", line 577, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python3.7/_strptime.py", line 362, in _strptime
data_string[found.end():])
ValueError: unconverted data remains: 18
Ошибка указывает на то, что %y
обработал только часть года 20
, сообщая нам, что он не был правильным заполнителем для ввода 2018
.