了解timedelta

Pau*_*aul 88 python 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)))
Run Code Online (Sandbox Code Playgroud)

所以我得到的区别start timeend time,第5行我铸造围捕的持续时间和现在是什么,有什么进一步的解释?

我知道delta意味着什么(平均值或差值),但为什么我必须传递seconds = uptime给我timedelta,为什么字符串转换工作得很好,我得到了HH:MM:SS

utd*_*mir 112

因为timedelta定义如下:

class datetime.timedelta([days,] [seconds,] [microseconds,] [milliseconds,] [minutes,] [hours,] [weeks])
Run Code Online (Sandbox Code Playgroud)

所有参数都是可选的,默认为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)
Run Code Online (Sandbox Code Playgroud)

对于str转换,它返回一个很好的格式化值而不是__repr__提高可读性.来自docs:

str(t)以[D day [s],] [H] H:MM:SS [.UUUUUU]的形式返回一个字符串,其中D对负t为负.(5)

>>> datetime.timedelta(seconds = 42).__repr__()
'datetime.timedelta(0, 42)'
>>> datetime.timedelta(seconds = 42).__str__()
'0:00:42'
Run Code Online (Sandbox Code Playgroud)

结帐文件:

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


mac*_*mac 12

为什么我必须将秒=正常运行时间传递给timedelta

因为timedelta对象可以传递秒,毫秒,天等...所以你需要指定传入的内容(这就是你使用显式键的原因).Typecasting int是多余的,因为他们也可以接受花车.

为什么弦乐演员工作得那么好,我得到HH:MM:SS?

格式化的类型转换不是__str__对象的内部方法.事实上,如果你写下你会得到相同的结果:

print datetime.timedelta(seconds=int(uptime))
Run Code Online (Sandbox Code Playgroud)