2010-09-03 12 views

Respuesta

22
import time 
now = time.time() 
... 
later = time.time() 
difference = int(later - now) 
+1

Esto da como resultado que el argumento "TypeError: int() debe ser una cadena, un objeto similar a un byte o un número, no un error 'datetime.timedelta'" en Python3. Ver la respuesta de Robert Longson. – typoerrpr

2

Si todo lo que necesita es medir un intervalo de tiempo, es posible utilizar time.time() función que devuelve segundos desde el Epoch como un número de coma flotante.

+0

cool, ¿cómo creo un objeto datetime con el punto flotante en segundos para imprimirlo bien? – Richard

+0

¿Estás hablando de diferencia horaria o tiempo absoluto? Este último se puede convertir de la cantidad bruta de segundos a la estructura del tiempo (con campos de año, mes, etc.) con 'time.localtime()' o 'time.gmtime()' y luego se convierte en cadena con 'time.asctime () '/''time.strftime()' o utilizado para construir el objeto 'datetime.datetime'. No estoy seguro de si hay alguna función en la biblioteca estándar de Python para descomponer/imprimir la diferencia de tiempo muy bien (aunque esta es una tarea mucho más fácil que la representación correcta del tiempo absoluto). – rkhayrov

6

El método total_segundos devolverá la diferencia, incluida cualquier parte fraccionaria.

from datetime import datetime 
now = datetime.now() 
... 
later = datetime.now() 
difference = (later - now).total_seconds() 

Puede convertir un entero que a través de int() si desea

+1

Obtengo 'AttributeError: el objeto 'float' no tiene ningún atributo 'total_seconds' –

2

La suma de los términos de la tupla timedelta con multiplicadores adecuados debe dar su respuesta. diff.days*24*60*60 + difference.seconds

from datetime import datetime 
now = datetime.now() 
... 
later = datetime.now() 
diff = later-now 
diff_in_seconds = diff.days*24*60*60 + diff.seconds 

La variable 'diff' es un objeto timedelta que es una tupla de (días, segundos, microsegundos) como se explica en detalle aquí https://docs.python.org/2.4/lib/datetime-timedelta.html. Todas las demás unidades (horas, minutos ...) se convierten a este formato.

>> diff = later- now 
>> diff 
datetime.timedelta(0, 8526, 689000) 
>> diff_in_seconds = diff.days*24*60*60 + diff.seconds 
>> diff_in_seconds 
>> 8527 

Otra forma de verlo sería si en lugar de más tarde, ahora (por lo tanto, una diferencia de tiempo positivo), en su lugar tiene una diferencia de tiempo negativo (antes-ahora), en el que el tiempo transcurrido entre los dos es siendo el mismo que en el ejemplo anterior

>> diff = earlier-now 
>> diff 
datetime.timedelta(-1, 77873, 311000) 
>> diff_in_seconds = diff.days*24*60*60 + diff.seconds 
>> diff_in_seconds 
>> -8527 

por lo tanto, incluso si estamos seguros de la duración es de menos de 1 día, es necesario tomar el término día en cuenta, ya que es un término importante en caso de diferencia de tiempo negativa.

Cuestiones relacionadas