Converting a timedelta to a float
The problem
You need to convert a time difference into a floating point quantity, like 2.5 days. Or you may want to do something related like round a fdatetime difference up or down, e.g. 3 or 2 days for our previous example.
The complications
When you subtract a datetime from another in Python, you get a timedelta object:
> from datetime import datetime, timedelta > d1 = datetime (year=2015, month=6, day=1, hour=12, minute=30) > d2 = datetime (year=2015, month=6, day=7, hour=18, minute=15) > td = d2 - d1 > td datetime.timedelta(6, 20700) > type (td) datetime.timedelta
Unfortunately, timedelta only returns the "parts" that make it up - days, seconds and microseconds:
> td.days, td.seconds, td.microseconds (6, 20700, 0)
The solution
In Python 3, you can divide one timedelta by another, which lets you do this:
> td / timedelta (days=1)
but not in Python 2.
However, timedelta has a method totalseconds, which returns the whole delta expressed as decimal seconds:
> td.total_seconds() 539100.0 > timedelta (days=1, microseconds=20).total_seconds() 86400.00002
Which lets us take the above solution and do this to work out the fractional days:
> td.total_seconds() / timedelta (days=1).total_seconds() 6.239583333333333
Unresolved issues
If you to express a time difference as microseconds, minutes, hours etc. you're going to have to do some more math.