了解时间三角洲

给定下面的 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 timeend time之间的差异,在第5行,我通过铸造总结了持续时间,现在,进一步的解释是什么?

我知道 delta 是什么意思(平均值或差值) ,但是为什么我必须将 seconds = uptime传递给 timedelta,为什么字符串强制转换工作得这么好以至于我得到了 HH:MM:SS

216055 次浏览

why do I have to pass seconds = uptime to timedelta

Because timedelta objects can be passed seconds, milliseconds, days, etc... so you need to specify what are you passing in (this is why you use the explicit key). Typecasting to int is superfluous as they could also accept floats.

and why does the string casting works so nicely that I get HH:MM:SS ?

It's not the typecasting that formats, is the internal __str__ method of the object. In fact you will achieve the same result if you write:

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

Because timedelta is defined like:

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

All arguments are optional and default to 0.

You can easily say "Three days and four milliseconds" with optional arguments that way.

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

And for str casting, it returns a nice formatted value instead of __repr__ to improve readability. From docs:

str(t) Returns a string in the form [D day[s], ][H]H:MM:SS[.UUUUUU], where D is negative for negative t. (5)

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

Checkout documentation:

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