months create python timedelta

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