Понимание timedelta



приведенный код Python ниже, пожалуйста, помогите мне понять, что там происходит.



start_time = time.time()
time.sleep(42)
end_time = time.time()

uptime = end_time - start_time

human_uptime = str(datetime.timedelta(seconds=int(uptime)))


так что я понимаю разницу между start time и end time, в строке 5 я округляю продолжительность путем литья и что теперь, каково дальнейшее объяснение?



Я знаю, что означает Дельта (среднее или разница), но почему я должен пройти seconds = uptime до timedelta и почему литье строк работает так хорошо, что я получаю HH:MM:SS ?

245   2  

2 ответов:

потому что timedelta определяется как:

class datetime.timedelta([days,] [seconds,] [microseconds,] [milliseconds,] [minutes,] [hours,] [weeks])

все аргументы являются необязательными и по умолчанию 0.

вы можете легко сказать "три дня и четыре миллисекунды" с дополнительными аргументами в ту сторону.

>>> 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)

и для кастинга str он возвращает хорошее форматированное значение вместо __repr__ для улучшения читабельности. Из документов:

str (t) возвращает строку в виде [D day[s], ][H]H:MM:SS[.Уууууу], где D отрицательно для отрицательного t. (5)

>>> datetime.timedelta(seconds = 42).__repr__()
'datetime.timedelta(0, 42)'
>>> datetime.timedelta(seconds = 42).__str__()
'0:00:42'

документации по кассе:

http://docs.python.org/library/datetime.html#timedelta-objects

Почему я должен передать секунды = uptime to timedelta

потому что timedelta объекты могут быть переданы секунд, миллисекунд, дней, и т. д... поэтому вам нужно указать, что вы передаете (именно поэтому вы используете явный ключ). Приведение к int является излишним, поскольку они также могут принимать поплавки.

и почему литье строк работает так хорошо, что я получаю HH:MM:SS ?

это не форматирование типов, это внутреннее __str__ метод объекта. На самом деле вы добьетесь того же результата, если напишете:

print datetime.timedelta(seconds=int(uptime))

Comments

    Ничего не найдено.