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.
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 :
strptime
= "string parse time" (temps d'analyse des chaînes)
strftime
= "string format time" (temps de formatage des chaînes)
Prononcez-le à voix haute aujourd'hui et vous n'aurez plus à le chercher dans 6 mois.
[1] : https://docs.python.org/2/library/datetime.html#datetime.datetime.strptime "datetime.datetime.strptime" (en anglais) [2] : https://docs.python.org/3/library/datetime.html#datetime.datetime.strptime [3] : https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior "strftime-and-strptime-behavior" (en anglais) [4] : https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior [5] : http://strftime.org/
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
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