Search code examples
pythonpython-dateutil

dateutil.parser - separate hours and minutes with dot


I use the dateutil.parser.parse function to recognize a date entered by a user. Normally hours and minutes are separated by a double point but sometimes a user enters something like 6.30pm which is parsed to 18:00. So the minutes are just dropped.

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

Is there a way to specify the dot as a legal separator or throw a ValueError if the user uses the wrong separator? I want to show at least an error message to the user and not just process the wrong recognized date.


Solution

  • What about a little substitution previous the parsing operation, something like:

    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