Parsing a date that can be in several formats in python

前端 未结 4 1487
陌清茗
陌清茗 2020-12-02 01:47

I would like to parse a date that can come in several formats, that I know beforehand. If I could not parse, I return nil. In ruby, I do like this:

DATE_FORM         


        
4条回答
  •  一整个雨季
    2020-12-02 02:23

    You can use try/except to catch the ValueError that would occur when trying to use a non-matching format. As @Bakuriu mentions, you can stop the iteration when you find a match to avoid the unnecessary parsing, and then define your behavior when my_date doesn't get defined because not matching formats are found:

    You can use try/except to catch the ValueError that would occur when trying to use a non-matching format:

    from datetime import datetime
    
    DATE_FORMATS = ['%m/%d/%Y %I:%M:%S %p', '%Y/%m/%d %H:%M:%S', '%d/%m/%Y %H:%M', '%m/%d/%Y', '%Y/%m/%d']
    test_date = '2012/1/1 12:32:11'
    
    for date_format in DATE_FORMATS:
        try:
            my_date = datetime.strptime(test_date, date_format)
        except ValueError:
            pass
        else:
          break
    else:
      my_date = None
    
    print my_date # 2012-01-01 12:32:11
    print type(my_date) # 
    

提交回复
热议问题