Python:转换2位/ 4位数年份

Mar*_*sen -2 python time date strptime python-datetime

我正在尝试使用以下代码在Python中将日期格式'31 -Dec-09'转换为'2009-12-31':

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)
Run Code Online (Sandbox Code Playgroud)

收到以下错误:

time data '9-Jan-19' does not match format '%d-%mmm-%y'
Run Code Online (Sandbox Code Playgroud)

我读过某个匹配两位数年份'00'的地方需要小写y而不是大写y.无论哪种方式,我得到相同的错误,所以我猜其他错误.有帮助吗?

Mar*_*ers 6

%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']
Run Code Online (Sandbox Code Playgroud)