Parsing a date in python without using a default

后端 未结 4 583
我寻月下人不归
我寻月下人不归 2021-01-04 05:51

I\'m using python\'s dateutil.parser tool to parse some dates I\'m getting from a third party feed. It allows specifying a default date, which itself defaults

4条回答
  •  自闭症患者
    2021-01-04 06:31

    I ran into the exact same problem with dateutil, I wrote this function and figured I would post it for posterity's sake. Basically using the underlying _parse method like @ILYA Khlopotov suggests:

    from dateutil.parser import parser
    import datetime
    from StringIO import StringIO
    
    _CURRENT_YEAR = datetime.datetime.now().year
    def is_good_date(date):
        try:
            parsed_date = parser._parse(parser(), StringIO(date))
        except:
            return None
        if not parsed_date: return None
        if not parsed_date.year: return None
        if parsed_date.year < 1890 or parsed_date.year > _CURRENT_YEAR: return None
        if not parsed_date.month: return None
        if parsed_date.month < 1 or parsed_date.month > 12: return None
        if not parsed_date.day: return None
        if parsed_date.day < 1 or parsed_date.day > 31: return None
        return parsed_date
    

    The returned object isn't adatetime instance, but it has the .year, .month, and, .day attributes, which was good enough for my needs. I suppose you could easily convert it to a datetime instance.

提交回复
热议问题