Transformer des dates avec le module python-dateutil

Récemment, j'ai eu besoin de transformer des dates écrites dans ce format : Wed, 13 Feb 2013 05:34:15 +0100 en quelque chose de plus « normé », ISO 8601.

J'ai obtenu ce que je souhaitais grâce au module python-dateutil, et je tiens à vous en faire profiter grâce à un exemple.

Au départ j'ai des dates sous cette forme Wed, 13 Feb 2013 05:34:15 +0100 que l'on peut schématiser de cette façon %a, %d %b %Y %H:%M:%S %z [1]. Je voulais quelque chose proche de la norme iso 8601, soit ça : %Y-%m-%dT%H:%M ou pour reprendre l'exemple, 2013-02-13T05:34.

Voilà ce que cela donne dans une session interactive Python (dans un programme, on peut créer une fonction).

olivier@tuborg:~ $ python
Python 2.7.3 (default, Jun 25 2012, 07:16:42) 
[GCC 4.2.2 20070831 prerelease [FreeBSD]] on freebsd8
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> import dateutil.parser
>>>
>>> s = 'Wed, 13 Feb 2013 05:34:15 +0100'
>>> dt = dateutil.parser.parse(s)
>>> dt
datetime.datetime(2013, 2, 13, 5, 34, 15, tzinfo=tzoffset(None, 3600))

Avant d'aller plus je vais expliquer les grandes lignes du programme.

  • Les lignes commençant par import .... permettent de charger les modules qui vont nous être utiles
  • s est une variable, elle représente la date à transformer
  • dt est un objet datetime.datetime que l'on va pouvoir manipuler grâce aux fonctions du module datetime

On peut supprimer l'information du fuseau horaire.

>>> dt = dateutil.parser.parse(s, ignoretz=True)
>>> dt
datetime.datetime(2013, 2, 13, 5, 34, 15)

Il nous reste plus qu'à « formater » notre objet datetime.datetime.

>>> dt.strftime('%Y-%m-%dT%H:%M')
'2013-02-13T05:34'
>>> 

Note

[1] Si l'on se réferre au tableau pour le formatage des fonctions strftime() et strptime().