from example python python-2.7 datetime timestamp iso8601

from - timedelta python example



El formato ISO del objeto Python UTC datetime no incluye Z(desplazamiento Zulu o Zero) (4)

Opción: isoformat()

La datetime y datetime de Python no admite los sufijos militares de la zona horaria como el sufijo ''Z'' para UTC. El siguiente reemplazo de cadena simple es 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: Fecha y hora, Biblioteca estándar de Python

Opción: strftime()

O puede usar strftime para lograr el mismo efecto:

In [4]: d.strftime(''%Y-%m-%d %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.

Adicional: Huso horario legible por humanos

Yendo más lejos, puede interesarle mostrar la información de la zona horaria legible por humanos, pytz con strftime zona horaria %Z strftime :

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''

¿Por qué Python 2.7 no incluye caracteres Z (Zulu o desplazamiento cero) al final de la cadena isoformat del objeto datetime de UTC a diferencia de JavaScript?

>>> datetime.datetime.utcnow().isoformat() ''2013-10-29T09:14:03.895210''

Mientras que en javascript

>>> console.log(new Date().toISOString()); 2013-10-29T09:38:41.341Z


Al combinar todas las respuestas anteriores, vine con la siguiente función:

from datetime import datetime, tzinfo, timedelta class simple_utc(tzinfo): def tzname(self,**kwargs): return "UTC" def utcoffset(self, dt): return timedelta(0) def getdata(yy, mm, dd, h, m, s) : d = datetime(yy, mm, dd, h, m, s) d = d.replace(tzinfo=simple_utc()).isoformat() d = str(d).replace(''+00:00'', ''Z'') return d print getdata(2018, 02, 03, 15, 0, 14)


Los objetos de datetime Python no tienen información de zona horaria de forma predeterminada, y sin ella, Python en realidad infringe la especificación ISO 8601 ( si no se proporciona información de zona horaria, se supone que es hora local ). Puede usar el paquete de pytz para obtener algunas zonas horarias predeterminadas, o directamente la subclase tzinfo :

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 cumple con el formato ISO 8601, que permite Z o +00:00 como sufijo para 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).


Python las fechas son un poco torpes. Usa la arrow

> str(arrow.utcnow()) ''2014-05-17T01:18:47.944126+00:00''

Arrow tiene esencialmente la misma API que la fecha, pero con zonas horarias y algunas sutilezas adicionales que deberían estar en la biblioteca principal.