Timedelta умножается на float в python

У меня есть две даты и вы можете рассчитать timedelta, как обычно.

Но я хочу рассчитать некоторый процент с результатом timedelta:

full_time = (100/percentage) * timdelta

Но кажется, что он может только умножаться на interegs.

Как использовать float вместо int как множитель?

Пример:

percentage     = 43.27
passed_time    = fromtimestamp(fileinfo.st_mtime) - fromtimestamp(fileinfo.st_ctime)
multiplier     = 100 / percentage   # 2.3110700254217702796394730760342
full_time      = multiplier * passed_time # BUG: here comes exception
estimated_time = full_time - passed_time

Если используется int(multiplier) - страдает точность.

Ответы

Ответ 1

Вы можете конвертировать в полные секунды и обратно:

full_time = timedelta(seconds=multiplier * passed_time.total_seconds())

timedelta.total_seconds можно найти на Python 2.7; в более ранних версиях используйте

def timedelta_total_seconds(td):
    return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / float(10**6)

Ответ 2

Вы можете использовать total_seconds():

datetime.timedelta(seconds=datetime.timedelta(minutes=42).total_seconds() * 0.8)
# => datetime.timedelta(0, 2016)