dateutil.parser - отдельные часы и минуты с точкой - PullRequest
0 голосов
/ 14 мая 2019

Я использую функцию dateutil.parser.parse, чтобы распознать дату, введенную пользователем.Обычно часы и минуты разделяются двойной точкой, но иногда пользователь вводит что-то вроде 6.30pm, которое анализируется до 18:00.Таким образом, минуты просто сбрасываются.

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

Есть ли способ указать точку в качестве допустимого разделителя или выбросить ValueError, если пользователь использует неправильный разделитель?Я хочу показать пользователю хотя бы сообщение об ошибке, а не просто обработать неверную распознанную дату.

1 Ответ

1 голос
/ 14 мая 2019

Как насчет небольшой подстановки, предшествующей операции разбора, что-то вроде:

import dateutil.parser
import re

def parse(timestr):
    timestr = re.sub(r"(\d{1,2})\.(\d{2})(\D*)$", r"\1:\2\3", 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
...