Parser une date a multiple format

Tagged:

Le but de ce billet est de montrer comment parser une date lorsqu'on est pas sur du format qu'on entre ... Par exemple on parse des dates de mails, mais elle ne sont pas toujours exprimée de la même manière :

  • 18 Jun 2005 22:22:22
  • Fri, 16 Dec 2005 15:55:53 +0100
  • ...

Donc j'ai fait une fonction évolutive en ce sens et qui me permet d'obtenir un objet datetime assez pratique pour la manipulation de date (et de time ;))

def parseDate(dDate):
    #removing timezone
    c = dDate[-5:-4]
    if (c == '+') or (c == '-'):
        dDate = dDate[:-6]
 
    #trying multiple date formats
    theDate = None
    formats = ["%d %b %Y %H:%M:%S","%a, %d %b %Y %H:%M:%S"]
    for format in formats:
        try:
            theDate = time.strptime(dDate,format)
        except ValueError:
            continue
            
    #if no date format found, assuming mail is from now
    if theDate is None:
        log('parsing date','date '+dDate+' is not parsed')
        return datetime.now()
 
    #return the datetime object
    return datetime.fromtimestamp(time.mktime(theDate))

Voila du coup si ça log une mauvaise date, ça crache pas le programme, qui tournera avec une date erronnée, et je pourrai aisément la rajouter !!!
En ce qui concerne les %, pour les format de dates rendez vous ici