¿Cuál es la forma más fácil de obtener la hora GMT actual en formato de marca de tiempo Unix?

5 minutos de lectura

avatar de usuario
Cory

Python proporciona diferentes paquetes (datetime, time, calendar) como se puede ver aquí para tratar con el tiempo. Cometí un gran error al usar lo siguiente para obtener la hora GMT actual time.mktime(datetime.datetime.utcnow().timetuple())

¿Cuál es una forma sencilla de obtener la hora GMT actual en la marca de tiempo de Unix?

  • ¿Qué son las entradas/salidas? datetime.utcnow() devuelve la hora UTC actual como objeto de fecha y hora (supongo que desea UTC cuando habla de “hora GMT”). time.time() devuelve la marca de tiempo de Unix directamente como número flotante. Aquí se explica cómo convertir datetime.date/datetime.datetime que representa la hora en UTC a la marca de tiempo POSIX.

    – jfs

    26 de mayo de 2013 a las 1:48

  • ¿El método propuesto es incorrecto o es demasiado detallado? Relacionado: stackoverflow.com/questions/15940280/…

    – Ciro Santilli Путлер Капут 六四事

    5 de diciembre de 2015 a las 16:21

  • ¿Por qué su método fue un error?

    – Skeller88

    12 de diciembre de 2017 a las 23:10

avatar de usuario
Edmond Burnett

Usaría time.time() para obtener una marca de tiempo en segundos desde la época.

import time

time.time()

Producción:

1369550494.884832

Para la implementación estándar de CPython en la mayoría de las plataformas, esto devolverá un valor UTC.

  • El problema es que el reloj local de su máquina puede no estar en UTC.

    – 9000

    26 de mayo de 2013 a las 7:00

  • @9000: Correcto, aunque siempre insistiría en UTC en cualquier entorno en el que importara el tiempo. Y pidió la solución más simple. Tenga en cuenta que con CPython en plataformas modernas, incluidas Linux, BSD, Mac OS X y Windows, todos devolverán UTC para time.time(). Esto refleja el comportamiento de la función de tiempo de la biblioteca estándar de C en estos sistemas operativos.

    – Edmond Burnett

    26 de mayo de 2013 a las 7:21


  • @ 9000: la zona horaria local no importa. La hora Unix corresponde a la hora UTC (si ignoramos la hora alrededor de los segundos bisiestos). Piénselo: la marca de tiempo es la cantidad de segundos transcurridos desde la época (un momento fijo en el tiempo): ¿por qué dependería de qué zona horaria usa el reloj local de la máquina? En cualquier momento dado, el tiempo de Unix es el mismo en todo el mundo. Algunas plataformas (desconocidas) podrían usar una época diferente, pero su valor aún no dependería de la zona horaria local.

    – jfs

    26 de mayo de 2013 a las 8:32

  • stackoverflow.com/questions/13890935/…

    – Ciro Santilli Путлер Капут 六四事

    5 de diciembre de 2015 a las 16:19

  • @jfs un momento fijo de tiempo y espacio, recuerde que el tiempo es relativo. Es imposible definir momentos que suceden al mismo tiempo

    – Rainb

    4 de enero de 2021 a las 12:12

import time

int(time.time()) 

Producción:

1521462189

avatar de usuario
Nick Caplinger

¿Esto ayuda?

from datetime import datetime
import calendar

d = datetime.utcnow()
unixtime = calendar.timegm(d.utctimetuple())
print unixtime

Cómo convertir el objeto de fecha y hora UTC de Python a la marca de tiempo de UNIX

  • @Cairnarvon Eso fue solo un ejemplo. Si desea la marca de tiempo actual, simplemente puede llamar time.time() y no necesita ninguna conversión de fecha y hora.

    – Mesa

    24 de agosto de 2016 a las 11:48

  • FWIW: Esa no es la hora UTC, es UTC convertida a la hora local. Para obtener una marca de tiempo en UTC, debe hacer algo más.

    – Sherlock70

    3 de noviembre de 2017 a las 9:00

avatar de usuario
mika

pitón2 y pitón3

es bueno usar el módulo de tiempo

import time
int(time.time())

1573708436

también puede usar el módulo de fecha y hora, pero cuando usa strftime (‘% s’), ¡pero strftime convierte el tiempo a su hora local!

pitón2

from datetime import datetime
datetime.utcnow().strftime('%s')

pitón3

from datetime import datetime
datetime.utcnow().timestamp()

avatar de usuario
Stan Kurdziel

Python 3 segundos con resolución decimal de microsegundos:

from datetime import datetime
print(datetime.now().timestamp())

Python 3 segundos enteros:

print(int(datetime.now().timestamp()))

ADVERTENCIA en datetime.utcnow().timestamp()!

datetime.utcnow() es un objeto que no reconoce la zona horaria. Ver referencia: https://docs.python.org/3/library/datetime.html#aware-and-naive-objects

Para algo como la 1 am UTC:

from datetime import timezone
print(datetime(1970,1,1,1,0,tzinfo=timezone.utc).timestamp())

o

print(datetime.fromisoformat('1970-01-01T01:00:00+00:00').timestamp())

si quitas el tzinfo=timezone.utc o +00:00, obtendrá resultados según su hora local actual. Ej: 1 a.m. del 1 de enero de 1970 en su zona horaria actual, lo que podría ser legítimo, por ejemplo, si desea la marca de tiempo del instante en que nació, debe usar la zona horaria en la que nació. Sin embargo, la marca de tiempo de datetime.utcnow().timestamp() no es el instante actual en hora local ni UTC. Por ejemplo, ahora estoy en GMT-7:00 y datetime.utcnow().timestamp() da una marca de tiempo de ¡7 horas en el futuro!

O simplemente usando el módulo estándar de fecha y hora

In [2]: from datetime import timezone, datetime
   ...: int(datetime.now(tz=timezone.utc).timestamp() * 1000)
   ...: 
Out[2]: 1514901741720

Puede truncar o multiplicar según la resolución que desee. Este ejemplo está emitiendo millis.

Si quieres un adecuado Unix marca de tiempo (en segundos) eliminar el * 1000

avatar de usuario
número de nombre de usuario

Al menos en python3, esto funciona:

>>> datetime.strftime(datetime.utcnow(), "%s")
'1587503279'

  • ¿Cuál es la ventaja de esto? time.time() da el mismo resultado, incluso con una resolución más alta. Las marcas de tiempo de Unix SIEMPRE están en UTC.

    – Kai Petzke

    7 ago 2021 a las 18:36

¿Ha sido útil esta solución?