¿"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, en 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 después de la época" (time.time()) devuelve el mismo valor en el mismo momento.
Aquí hay una muestra de la salida que ejecuté en mi ordenador, 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 la convertí en una cadena usando la librería datetime
, convirtiéndola en una cadena legible para los humanos.
Esto es para la forma textual de una marca de tiempo que puede ser usada en sus archivos de texto. (El título de la pregunta era diferente en el pasado, por lo que la introducción de esta respuesta se cambió para aclarar cómo se podría interpretar como la hora. [actualizado 2016-01-14])
Puedes obtener la marca de tiempo como una cadena usando el .now()
o .utcnow()
de datetime.datetime
:
>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000
El now
difiere del utcnow
como era de esperar -- por lo demás funcionan de la misma manera:
>>> print datetime.datetime.now()
2012-12-15 11:15:09.205000
Se puede convertir la marca de tiempo en 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 manera que desee:
>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'
Si quieres el formato ISO, utiliza el método .isoformat()
del objeto:
>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'
Puede utilizarlos en las variables para los cálculos y la impresión 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
Basado en la respuesta de #squiguy, para obtener un timestamp verdadero, lo escribiría a partir de float.
>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318
Al menos ese'es el concepto.