Python: конвертировать 2-значный / 4-значный год - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь преобразовать формат даты '31 -Dec-09 'в' 2009-12-31 'в Python со следующим кодом:

df = ['19-Jan-19', '4-Jan-19']   
f = [datetime.datetime.strptime(x,'%d-%mmm-%y').strftime('%Y-%m-%d') for x in df]
print(f)

Получение следующей ошибки:

time data '9-Jan-19' does not match format '%d-%mmm-%y'

Я где-то читал, что для сопоставления двузначного года '00' потребуется строчная буква y вместо прописной.В любом случае, я получаю ту же ошибку, поэтому думаю, что-то не так.Любая помощь?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Поскольку вы указываете месяц в сокращенной записи, вы должны использовать% b вместо% mmm (это недопустимый формат в datetime)

0 голосов
/ 24 января 2019

Ваши %y и %Y шаблоны в порядке, проблема в том, что вы использовали %mmm здесь. Все шаблоны методов datetime.strptime() являются шаблонами из одной буквы , а %mmm рассматривается как шаблон %m, за которым следуют два литеральных символа m. %m соответствует числовому месяцу (1 или 2 цифры, заполнение нулями необязательно). Так что 19-1mm-19 будет соответствовать, а 19-Jan-19 - нет, потому что месяц не числовой и два буквальных символа m отсутствуют.

Правильный шаблон для использования здесь '%d-%b-%y', где %b соответствует сокращенному названию месяца.

Демо-версия:

>>> import datetime
>>> df = ['19-Jan-19', '4-Jan-19']
>>> [datetime.datetime.strptime(x,'%d-%b-%y').strftime('%Y-%m-%d') for x in df]
['2019-01-19', '2019-01-04']
...