parse - Convertir la cadena de fecha JSON a datetime de Python
python today date (2)
Para proporcionar una alternativa, si no le importa instalar el paquete python-dateutil
, puede usar dateutil.parser.parse
. Tenga en cuenta que el formato de la entrada se adivina mediante parse
; Una entrada no válida todavía puede ser interpretada, correctamente o de otra manera.
Sin zona horaria
Si prefiere que no se establezca la zona horaria, lo cual está perfectamente bien si representa todos los tiempos internamente solo como UTC, use:
>>> dateutil.parser.parse(''2012-05-29T19:30:03.283Z'', ignoretz=True)
datetime.datetime(2012, 5, 29, 19, 30, 3, 283000)
Con zona horaria
Tenga en cuenta que, a diferencia de datetime.datetime.strptime
, esta llamada predeterminada a parse
conserva automáticamente la zona horaria 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 es necesario realizar una afirmación de prueba de igualdad, el objeto esperado se puede construir como:
>>> import datetime
>>> datetime.datetime(2012, 5, 29, 19, 30, 3, 283000, tzinfo=dateutil.tz.tzutc())
Cuando se traducen fechas a JSON, javascript está guardando fechas en este formato:
2012-05-29T19:30:03.283Z
Sin embargo, no estoy seguro de cómo introducir esto en un objeto datetime de python. He intentado estos:
# 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'')
Creo que javascript está guardando la cadena en formato ISO oficial, por lo que parece que debería haber una manera de que datetime.strptime()
python lo lea.
Pruebe el siguiente formato:
%Y-%m-%dT%H:%M:%S.%fZ
Por ejemplo:
>>> 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)
La Z
en la fecha solo significa que debe interpretarse como una hora UTC, por lo que ignorarla no causará ninguna pérdida de información. Puede encontrar esta información aquí: http://www.w3.org/TR/NOTE-datetime