理解时间

2024-03-28 20:26:39 发布

您现在位置:Python中文网/ 问答频道 /正文

给定下面的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


Tags: 代码datetimetimesleepstarttimedeltaintend
2条回答

why do I have to pass seconds = uptime to timedelta

因为timedelta对象可以传递秒、毫秒、天等。。。所以需要指定传入的内容(这就是为什么使用显式键)。向int进行类型转换是多余的,因为它们也可以接受浮点数。

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

格式化的不是类型转换,而是对象的内部__str__方法。事实上,如果你写下:

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

因为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 casting,它返回一个很好的格式化值,而不是__repr__,以提高可读性。来自文档:

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'

签出文档:

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

相关问题 更多 >