21

2 つの日付があり、通常どおり 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)精度が低下します。

4

2 に答える 2

28

合計秒数に変換して戻すことができます。

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

timedelta.total_secondsPython 2.7 から利用可能です。以前のバージョンで使用

def timedelta_total_seconds(td):
    return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / float(10**6)
于 2012-09-05T09:37:51.660 に答える
3

使用できますtotal_seconds()

datetime.timedelta(seconds=datetime.timedelta(minutes=42).total_seconds() * 0.8)
# => datetime.timedelta(0, 2016)
于 2012-09-05T09:37:39.990 に答える