Lors de la traduction des dates en JSON, javascript enregistre les dates dans ce format:
2012-05-29T19:30:03.283Z
Cependant, je ne sais pas comment obtenir ceci dans un objet python datetime. J'ai essayé ces derniers:
# Throws an error because the 'Z' isn't accounted for:
datetime.datetime.strptime(obj[key], '%Y-%m-%dT%H:%M:%S.%f')
# Throws an error because '%Z' doesn't know what to do with the 'Z'
# at the end of the string
datetime.datetime.strptime(obj[key], '%Y-%m-%dT%H:%M:%S.%f%Z')
Je crois que javascript enregistre la chaîne au format ISO officiel, il semble donc qu'il devrait y avoir un moyen d'obtenir la datetime.strptime()
de python pour la lire?
Essayez le format suivant:
%Y-%m-%dT%H:%M:%S.%fZ
Par exemple:
>>> datetime.datetime.strptime('2012-05-29T19:30:03.283Z', '%Y-%m-%dT%H:%M:%S.%fZ')
datetime.datetime(2012, 5, 29, 19, 30, 3, 283000)
Le Z
dans la date signifie simplement qu'il doit être interprété comme une heure UTC, donc l'ignorer ne causera aucune perte d'information. Vous pouvez trouver ces informations ici: http://www.w3.org/TR/NOTE-datetime
Pour fournir une alternative, si cela ne vous dérange pas d'installer le python-dateutil
package, vous pouvez utiliser dateutil.parser.parse
. Sachez que le format de l'entrée est deviné par parse
; une entrée non valide peut toujours être interprétée, correctement ou autrement.
Si vous préférez ne pas avoir le fuseau horaire défini, ce qui est parfaitement bien si vous représentez toutes les heures en interne uniquement en UTC, utilisez:
>>> dateutil.parser.parse('2012-05-29T19:30:03.283Z', ignoretz=True)
datetime.datetime(2012, 5, 29, 19, 30, 3, 283000)
Notez que contrairement à datetime.datetime.strptime
, cet appel par défaut à parse
préserve automatiquement le fuseau horaire UTC.
>>> import dateutil.parser
>>> dateutil.parser.parse('2012-05-29T19:30:03.283Z')
datetime.datetime(2012, 5, 29, 19, 30, 3, 283000, tzinfo=tzutc())
Si une affirmation de test pour l'égalité doit être faite, l'objet attendu peut être construit comme:
>>> import datetime
>>> datetime.datetime(2012, 5, 29, 19, 30, 3, 283000, tzinfo=dateutil.tz.tzutc())