Solución:
Opción: isoformat()
Python datetime
no admite los sufijos de zona horaria militar como el sufijo ‘Z’ para UTC. El siguiente reemplazo de cadena simple hace el truco:
In [1]: import datetime
In [2]: d = datetime.datetime(2014, 12, 10, 12, 0, 0)
In [3]: str(d).replace('+00:00', 'Z')
Out[3]: '2014-12-10 12:00:00Z'
str(d)
es esencialmente lo mismo que d.isoformat(sep=' ')
Ver: Datetime, Python Standard Library
Opción: strftime()
O podrías usar strftime
para lograr el mismo efecto:
In [4]: d.strftime('%Y-%m-%dT%H:%M:%SZ')
Out[4]: '2014-12-10 12:00:00Z'
Nota: esta opción solo funciona cuando sabe que la fecha especificada está en UTC.
Ver: datetime.strftime ()
Adicional: Zona horaria legible por humanos
Yendo más allá, es posible que le interese mostrar información de la zona horaria legible por humanos, pytz
con strftime
%Z
bandera de zona horaria:
In [5]: import pytz
In [6]: d = datetime.datetime(2014, 12, 10, 12, 0, 0, tzinfo=pytz.utc)
In [7]: d
Out[7]: datetime.datetime(2014, 12, 10, 12, 0, tzinfo=<UTC>)
In [8]: d.strftime('%Y-%m-%d %H:%M:%S %Z')
Out[8]: '2014-12-10 12:00:00 UTC'
Pitón datetime
los objetos no tienen información de zona horaria de forma predeterminada, y sin ella, Python en realidad viola la especificación ISO 8601 (si no se proporciona información de zona horaria, se supone que es la hora local). Puede usar el paquete pytz para obtener algunas zonas horarias predeterminadas, o directamente una subclase tzinfo
tú mismo:
from datetime import datetime, tzinfo, timedelta
class simple_utc(tzinfo):
def tzname(self,**kwargs):
return "UTC"
def utcoffset(self, dt):
return timedelta(0)
Luego, puede agregar manualmente la información de la zona horaria a utcnow()
:
>>> datetime.utcnow().replace(tzinfo=simple_utc()).isoformat()
'2014-05-16T22:51:53.015001+00:00'
Tenga en cuenta que esto SÍ se ajusta al formato ISO 8601, que permite Z
o +00:00
como sufijo de UTC. Tenga en cuenta que este último en realidad se ajusta mejor al estándar, con la forma en que se representan las zonas horarias en general (UTC es un caso especial).
Los siguientes scripts de javascript y python dan resultados idénticos. Creo que es lo que buscas.
JavaScript
new Date().toISOString()
Pitón
from datetime import datetime
datetime.utcnow().isoformat()[:-3]+'Z'
La salida que dan es la hora utc (zelda) formateada como una cadena ISO con un dígito significativo de 3 milisegundos y adjuntada con una Z.
2019-01-19T23:20:25.459Z