了解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 timeend time之间的区别,在第5行中,我通过投射取得了持续时间,现在又有什么更进一步的解释?

我知道三angular洲意味着什么(平均或差异),但为什么我必须seconds = uptime timedelta ,为什么string转换工作如此好,我得到HH:MM:SS

因为timedelta是这样定义的:

 class datetime.timedelta([days,] [seconds,] [microseconds,] [milliseconds,] [minutes,] [hours,] [weeks]) All arguments are optional and default to 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 [.UUUUUU]的forms返回一个string,其中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

为什么我必须将seconds = uptime传递给timedelta

因为timedelta对象可以传递秒,毫秒,天等等,所以你需要指定你传递什么(这就是为什么你使用显式键)。 typesint是多余的,因为他们也可以接受浮游物。

为什么string转换工作得很好,我得到HH:MM:SS?

这不是格式化的types,是对象的内部__str__方法。 事实上,如果你写的话你会得到同样的结果:

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