Conversion d'une chaîne en date

J'ai une énorme liste de dates et d'heures comme celle-ci sous forme de chaînes :

Jun 1 2005  1:33PM
Aug 28 1999 12:00AM

Je vais les replacer dans des champs de date corrects dans une base de données et je dois donc les transformer en objets de date réels.

Le tout passe par l'ORM de Django, je ne peux donc pas utiliser SQL pour effectuer la conversion lors de l'insertion.

Solution

datetime.strptime est la routine principale pour analyser les chaînes de caractères en dates. Elle peut gérer toutes sortes de formats, le format étant déterminé par une chaîne de format que vous lui donnez :

from datetime import datetime

datetime_object = datetime.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')

L'objet datetime résultant est indépendant du fuseau horaire.

Liens :

  • Documentation Python pour strptime : [Python 2][1], [Python 3][2].

  • Documentation Python sur les chaînes de format strptime/strftime : [Python 2][3], [Python 3][4].

  • [strftime.org][5] est aussi une très bonne référence pour strftime.

Notes :

Commentaires (14)

Utilisez la bibliothèque tierce [dateutil][1] :

from dateutil import parser
parser.parse("Aug 28 1999 12:00AM")  # datetime.datetime(1999, 8, 28, 0, 0)

Elle peut gérer la plupart des formats de date, y compris celui que vous devez analyser. Elle est plus pratique que strptime car elle peut deviner le bon format la plupart du temps.

C'est très utile pour écrire des tests, où la lisibilité est plus importante que la performance.

Vous pouvez l'installer avec :

pip install python-dateutil

[1] : https://dateutil.readthedocs.io

Commentaires (8)

Consultez [strptime][1] dans le module [time][2]. C'est l'inverse de [strftime][3].

$ python
>>> import time
>>> time.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')
time.struct_time(tm_year=2005, tm_mon=6, tm_mday=1,
                 tm_hour=13, tm_min=33, tm_sec=0,
                 tm_wday=2, tm_yday=152, tm_isdst=-1)

[1] : http://docs.python.org/3/library/time.html#time.strptime [2] : http://docs.python.org/3/library/time.html [3] : http://docs.python.org/3/library/time.html#time.strftime

Commentaires (6)