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?
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
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
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()
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
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
¿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