Как я могу выполнить divison на datetime.timedelta в python?

Я хотел бы иметь возможность сделать следующее:

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' 

но операция разделения не поддерживается на timedeltas. Есть ли способ, которым я могу реализовать divison для timedeltas?

Изменить: похоже, что это было добавлено в Python 3.2 (спасибо rincewind!): Http://bugs.python.org/issue2706

Конечно, просто конвертируйте в несколько секунд (минуты, миллисекунды, часы, возьмите свой выбор единиц) и выполните разделение.

EDIT (снова): поэтому вы не можете назначить 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 

И включить это в предложение Надии:

 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 , по крайней мере, в вашем коде.

Подразделение и умножение на целые числа, похоже, работают из коробки :

 >>> from datetime import timedelta >>> timedelta(hours=6) datetime.timedelta(0, 21600) >>> timedelta(hours=6) / 2 datetime.timedelta(0, 10800) 

Вы можете переопределить оператор разделения следующим образом:

 class MyTimeDelta(timedelta): def __div__(self, value): # Dome something about the object