Saltar al contenido

El formato ISO del objeto de fecha y hora de Python UTC no incluye Z (Zulu o compensación cero)

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
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *