问题描述
该日期该如何精确格式化?
date = '2020-09-05 15:00:1605 Sep 2020,15:00 '
datetime_object = datetime.strptime(date,'%Y-%m-%d,%H:%M:%s')
执行此操作时,出现错误。我究竟做错了什么?日期变量应如何格式化?我认为毫秒已过,我该如何格式化Sep 2020,15:00
?
我得到的错误是
ValueError: time data '2020-09-05 15:00:1605 Sep 2020,15:00 ' does not match format '%Y-%m-%d,%H:%M:%s'
解决方法
问题在于您的日期变量与传递给datetime.strptime
的格式不匹配。
以下作品:
date = '2020-09-05 15:00:1605 Sep 2020,15:00 '
datetime_object = datetime.strptime(date[ : 19 ],'%Y-%m-%d %H:%M:%S')
请注意,我通过切片05 Sep 2020,15:00
来删除date
,并稍微更改了日期格式字符串以删除逗号和其后的双空格。
现在工作正常:
>>> datetime_object
datetime.datetime(2020,9,5,15,16)
,
我建议使用regex
检查输入,如果匹配则使用fromisoformat
解析为日期时间。
from datetime import datetime
import re
s = '2020-09-05 15:00:1605 Sep 2020,15:00 '
# assuming you need this often,run a compile
p = re.compile('[0-9]{4}\-[0-9]{2}\-[0-9]{2}\ [0-9]{2}\:[0-9]{2}\:[0-9]{2}')
m = re.search(p,s)
if m:
print(repr(datetime.fromisoformat(m.group(0))))
# datetime.datetime(2020,16)