¿Python’s time.time () devuelve la marca de tiempo local o UTC?

¿ time.time() en el módulo de tiempo de Python devuelve la hora del sistema o la hora en UTC?

La función time.time() devuelve el número de segundos desde la época, como segundos. Tenga en cuenta que la “época” se define como el inicio del 1 de enero de 1970 en UTC. Así que la época se define en términos de UTC y establece un momento global en el tiempo. No importa dónde se encuentre “segundos pasados ​​de la época” (time.time ()) devuelve el mismo valor en el mismo momento.

Aquí hay una salida de muestra que ejecuté en mi computadora, convirtiéndola también en una cadena.

 Python 2.7.3 (default, Apr 24 2012, 00:00:54) [GCC 4.7.0 20120414 (prerelease)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import time >>> ts = time.time() >>> print ts 1355563265.81 >>> import datetime >>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S') >>> print st 2012-12-15 01:21:05 >>> 

La variable ts es el tiempo devuelto en segundos. Luego lo convertí en una cadena usando la biblioteca datetime , lo que la convierte en una cadena que puede leerse por humanos.

Esto es para la forma de texto de una marca de tiempo que puede usarse en sus archivos de texto. (El título de la pregunta era diferente en el pasado, por lo que se cambió la introducción a esta respuesta para aclarar cómo se podría interpretar como el momento. [Actualizado el 2016-01-14])

Puede obtener la marca de tiempo como una cadena utilizando .now() o .utcnow() de datetime.datetime :

 >>> import datetime >>> print datetime.datetime.utcnow() 2012-12-15 10:14:51.898000 

El now difiere de su utcnow como se esperaba; de lo contrario, funcionan de la misma manera:

 >>> print datetime.datetime.now() 2012-12-15 11:15:09.205000 

Puede representar la marca de tiempo a la cadena explícitamente:

 >>> str(datetime.datetime.now()) '2012-12-15 11:15:24.984000' 

O puede ser aún más explícito para formatear la marca de tiempo de la forma que desee:

 >>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p") 'Saturday, 15. December 2012 11:19AM' 

Si desea el formato ISO, use el método .isoformat() del objeto:

 >>> datetime.datetime.now().isoformat() '2013-11-18T08:18:31.809000' 

Puede utilizarlos en variables para cálculos e imprimir sin conversiones.

 >>> ts = datetime.datetime.now() >>> tf = datetime.datetime.now() >>> te = tf - ts >>> print ts 2015-04-21 12:02:19.209915 >>> print tf 2015-04-21 12:02:30.449895 >>> print te 0:00:11.239980 

Basándome en la respuesta de #squiguy, para obtener una marca de tiempo verdadera, escribiría “float”.

 >>> import time >>> ts = int(time.time()) >>> print(ts) 1389177318 

Al menos ese es el concepto.

La respuesta podría ser ni una ni otra.

  • ni: time.time() devuelve aproximadamente la cantidad de segundos transcurridos desde la Época. El resultado no depende de la zona horaria, por lo que no es UTC ni la hora local. Aquí está la definición POSIX para “Segundos desde la época” .

  • both: time.time() no requiere que el reloj de su sistema esté sincronizado, por lo que refleja su valor (aunque no tiene nada que ver con la zona horaria local). Diferentes equipos pueden obtener diferentes resultados al mismo tiempo. Por otro lado, si la hora de su computadora está sincronizada, es fácil obtener la hora UTC de la marca de tiempo (si ignoramos los segundos de salto):

     from datetime import datetime utc_dt = datetime.utcfromtimestamp(timestamp) 

Para saber cómo obtener las marcas de tiempo de la hora UTC en varias versiones de Python, consulte ¿Cómo puedo convertir una fecha en segundos desde la época según UTC?

Finalmente me conformé con:

 >>> import time >>> time.mktime(time.gmtime()) 1509467455.0 

No hay tal cosa como una “época” en una zona horaria específica. La época está bien definida como un momento específico en el tiempo, por lo que si cambia la zona horaria, el tiempo en sí también cambia. Específicamente, esta vez es el Jan 1 1970 00:00:00 UTC . Entonces time.time() devuelve el número de segundos desde la época.