Python 2.6.5:如何使用timedelta除以另一个timedelta?

19

我正在尝试将一个timedelta对象除以另一个来计算服务器的正常运行时间:

>>> import datetime
>>> installation_date=datetime.datetime(2010,8,01)
>>> down_time=datetime.timedelta(seconds=1400)
>>> server_life_period=datetime.datetime.now()-installation_date
>>> down_time_percentage=down_time/server_life_period
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'datetime.timedelta' 
           and 'datetime.timedelta'

我知道这个问题在Python 3.2中已经得到解决, 但在Python的早期版本中是否有处理它的便捷方式,除了计算微秒数、秒数和天数并进行除法之外?

谢谢,

Adam


可能是重复的问题:如何在Python中对datetime.timedelta执行除法? - Mechanical snail
1个回答

34

在Python≥2.7中,有一个.total_seconds()方法用于计算timedelta中包含的总秒数:

>>> down_time.total_seconds() / server_life_period.total_seconds()
0.0003779903727652387

否则,除非计算总微秒数(对于版本 & lt; 2.7 )。

>>> def get_total_seconds(td): return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 1e6) / 1e6
... 
>>> get_total_seconds(down_time) / get_total_seconds(server_life_period)
0.0003779903727652387

4
@Adam: 第二种方法适用于2.6版本。(当然,这只是“除了”解决方案。) - kennytm
@kennytm 第二种方法对于2.6非常好。但是你需要将td.microseconds除以1000000,否则计算可能会出现显著偏差。 - Andrew Riker
@AndrewRiker 函数结尾已经有一个 / 1e6 了吗? - kennytm
@kennytm 感谢更新。我在浏览器中错过了正确的滚动条。 - Andrew Riker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接