我正在尝试使用以下代码在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。无论哪种方式,我都会遇到相同的错误,因此我猜还有其他错误。有帮助吗?
答案 0 :(得分:5)
您的%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']
答案 1 :(得分:1)
由于您以简写形式指定月份,因此您应使用%b而不是%mmm(日期时间这不是有效格式)