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

时间:2019-01-24 15:52:41

标签: python date time python-datetime strptime

我正在尝试使用以下代码在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)

出现以下错误:

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

我在某处读到,匹配两位数字的年份'00'需要小写的y而不是大写的y。无论哪种方式,我都会遇到相同的错误,因此我猜还有其他错误。有帮助吗?

2 个答案:

答案 0 :(得分:5)

您的%y%Y模式很好,问题是您在这里使用了%mmmdatetime.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']

答案 1 :(得分:1)

由于您以简写形式指定月份,因此您应使用%b而不是%mmm(日期时间这不是有效格式)