Why can't I split datetime.timedelta into a float?

>>> import datetime >>> now1 = datetime.datetime.now() >>> now2 = datetime.datetime.now() >>> timedelta = now2-now1 >>> halfdt = timedelta/2 #This works just fine >>> halfdt = timedelta/2. #TypeError: unsupported operand type(s) for /: 'datetime.timedelta' and 'float' 

Does anyone know rationality just to allow timedeltas to divide integers?

+6
source share
2 answers

It is actually quite simple - it was a missing feature.

The surface of this is that it is added as a function in Python 3.x.

Note the difference between the supported operation tables in 2.x and 3.x.

+5
source

Very interesting - I would also expect it to work. I just wrote a function with some / doctests examples that does this in Python 2.x. Also published as an ActiveState recipe :

 import datetime def divide_timedelta(td, divisor): """Python 2.x timedelta doesn't support division by float, this function does. >>> td = datetime.timedelta(10, 100, 1000) >>> divide_timedelta(td, 2) == td / 2 True >>> divide_timedelta(td, 100) == td / 100 True >>> divide_timedelta(td, 0.5) datetime.timedelta(20, 200, 2000) >>> divide_timedelta(td, 0.3) datetime.timedelta(33, 29133, 336667) >>> divide_timedelta(td, 2.5) datetime.timedelta(4, 40, 400) >>> td / 0.5 Traceback (most recent call last): ... TypeError: unsupported operand type(s) for /: 'datetime.timedelta' and 'float' """ # timedelta.total_seconds() is new in Python version 2.7, so don't use it total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 1e6) / 1e6 divided_seconds = total_seconds / float(divisor) return datetime.timedelta(seconds=divided_seconds) if __name__ == '__main__': import doctest doctest.testmod() 
+2
source

Source: https://habr.com/ru/post/915985/


All Articles