dateutil.parser - 用点分隔小时和分钟

dateutil.parser - separate hours and minutes with dot

我使用 dateutil.parser.parse 函数来识别用户输入的日期。通常小时和分钟由双点分隔,但有时用户输入类似 6.30pm 的内容,它会被解析为 18:00。所以会议纪要被删掉了。

>>> dateutil.parser.parse ('6.30pm')
datetime.datetime(2019, 5, 14, 18, 0)

有没有办法将点指定为合法的分隔符,或者如果用户使用了错误的分隔符则抛出 ValueError?我想至少向用户显示一条错误消息,而不仅仅是处理错误的识别日期。

在解析操作之前做一点替换怎么样,比如:

import dateutil.parser
import re

def parse(timestr):
    timestr = re.sub(r"(\d{1,2})\.(\d{2})(\D*)$", r":", timestr)
    return dateutil.parser.parse(timestr)

print(parse('6.30pm')) # >> 2019-05-14 18:30:00
print(parse('12:06.30')) # >> 2019-05-14 12:06:30
print(parse('2018-01-01 12:06:05.123'))  # >> 2018-01-01 12:06:05.123000