如何在Python中对datetime.timedelta进行除法运算?
我想要实现以下功能:
num_intervals = (cur_date - previous_date) / interval_length
或者
print (datetime.now() - (datetime.now() - timedelta(days=5)))
/ timedelta(hours=12)
# won't run, would like it to print '10'
但是,时间差的除法操作是不支持的。我有没有办法为时间差实现除法呢?
补充:看起来这个功能是在Python 3.2中添加的(感谢rincewind!):http://bugs.python.org/issue2706
3 个回答
4
你可以这样重写除法运算符:
class MyTimeDelta(timedelta):
def __div__(self, value):
# Dome something about the object
17
用整数进行除法和乘法运算似乎是直接可以使用的,没什么复杂的:
>>> from datetime import timedelta
>>> timedelta(hours=6)
datetime.timedelta(0, 21600)
>>> timedelta(hours=6) / 2
datetime.timedelta(0, 10800)
13
当然,可以把时间转换成秒(或者分钟、毫秒、小时,随你选择单位),然后进行除法运算。
编辑(再次更新):所以你不能直接给 timedelta.__div__
赋值。那就试试这个吧:
divtdi = datetime.timedelta.__div__
def divtd(td1, td2):
if isinstance(td2, (int, long)):
return divtdi(td1, td2)
us1 = td1.microseconds + 1000000 * (td1.seconds + 86400 * td1.days)
us2 = td2.microseconds + 1000000 * (td2.seconds + 86400 * td2.days)
return us1 / us2 # this does integer division, use float(us1) / us2 for fp division
然后把这个和nadia的建议结合起来:
class MyTimeDelta:
__div__ = divtd
使用示例:
>>> divtd(datetime.timedelta(hours = 12), datetime.timedelta(hours = 2))
6
>>> divtd(datetime.timedelta(hours = 12), 2)
datetime.timedelta(0, 21600)
>>> MyTimeDelta(hours = 12) / MyTimeDelta(hours = 2)
6
等等。当然,你甚至可以把你自定义的类命名(或者起个别名)为 timedelta
,这样在你的代码中就可以用这个自定义的 timedelta
来替代真正的 timedelta
。