create - python timedelta months
Entendiendo timedelta (2)
Dado el código python a continuación, ayúdenme a comprender qué está sucediendo allí.
start_time = time.time()
time.sleep(42)
end_time = time.time()
uptime = end_time - start_time
human_uptime = str(datetime.timedelta(seconds=int(uptime)))
De modo que entiendo la diferencia entre la start time
y la start time
end time
, en la línea 5, redondeo la duración mediante casting y, ahora, ¿cuál es la explicación adicional?
Sé lo que significa delta (promedio o diferencia), pero ¿por qué tengo que pasar seconds = uptime
de seconds = uptime
a timedelta
y por qué el timedelta
funciona tan bien que obtengo HH:MM:SS
?
¿Por qué tengo que pasar segundos = tiempo de actividad a timedelta
Debido a que los objetos timedelta se pueden pasar segundos, milisegundos, días, etc. ... por lo que debe especificar qué está pasando (esta es la razón por la que usa la clave explícita). Typecasting to int
es superfluo ya que también podrían aceptar carrozas.
y ¿por qué el enyesado funciona tan bien que obtengo HH: MM: SS?
No es el encasillado lo que formatea, es el método __str__
interno del objeto. De hecho, obtendrás el mismo resultado si escribes:
print datetime.timedelta(seconds=int(uptime))
Porque timedelta se define como:
class datetime.timedelta([days,] [seconds,] [microseconds,] [milliseconds,] [minutes,] [hours,] [weeks])
Todos los argumentos son opcionales y por defecto a 0.
Puede decir fácilmente "Tres días y cuatro milisegundos" con argumentos opcionales de esa manera.
>>> datetime.timedelta(days=3, milliseconds=4)
datetime.timedelta(3, 0, 4000)
>>> datetime.timedelta(3, 0, 0, 4) #no need for that.
datetime.timedelta(3, 0, 4000)
Y para el casting str, devuelve un buen valor formateado en lugar de __repr__
para mejorar la legibilidad. De documentos:
str (t) Devuelve una cadena con el formato [D día [s],] [H] H: MM: SS [.UUUUUU], donde D es negativo para t negativo. (5)
>>> datetime.timedelta(seconds = 42).__repr__()
''datetime.timedelta(0, 42)''
>>> datetime.timedelta(seconds = 42).__str__()
''0:00:42''
Documentación de pago:
http://docs.python.org/library/datetime.html#timedelta-objects