如何避免datetime.strptime不匹配的ValueError?

问题描述

该日期该如何精确格式化?

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)