Entendiendo timedelta
Dado el código python a continuación, por favor ayúdame a entender lo que 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)))
Así que obtengo la diferencia entre start time
y end time
, en la línea 5 redondeo la duración por 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
a timedelta
y por qué el casting de cadenas funciona tan bien que obtengo HH:MM:SS
?
2 answers
Porque timedelta se define como:
class datetime.timedelta([days,] [seconds,] [microseconds,] [milliseconds,] [minutes,] [hours,] [weeks])
Todos los argumentos son opcionales y por defecto 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 str casting, devuelve un buen valor formateado en lugar de __repr__
para mejorar la legibilidad. De docs:
Str(t) Devuelve una cadena en la forma [D day[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'
Pago documentación:
Http://docs.python.org/library/datetime.html#timedelta-objects
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-11 20:47:26
¿Por qué tengo que pasar segundos = uptime a timedelta
Porque los objetos timedelta se pueden pasar segundos, milisegundos, días, etc... por lo tanto, debe especificar qué está pasando (es por eso que usa la clave explícita). Encasillar a int
es superfluo, ya que también podrían aceptar flotadores.
¿Y por qué el casting de cuerdas funciona tan bien que obtengo HH:MM:SS ?
No es el encasillamiento lo que formatea, es el método interno __str__
del objeto. De hecho, lograrás el mismo resultado si escribes:
print datetime.timedelta(seconds=int(uptime))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-19 15:14:00