假设我有这些DATATIME变量:的Python,日期时间的“时间差”百分比
start_time, end_time, current_time
我想通过检查current_time
和start_time
之间的时间差和end_time
IE:假设开始时间和结束时间之间的间隔为current_time
和end_time
之间的24小时,还有6小时完成,应该留下%25。
这怎么办?
假设我有这些DATATIME变量:的Python,日期时间的“时间差”百分比
start_time, end_time, current_time
我想通过检查current_time
和start_time
之间的时间差和end_time
IE:假设开始时间和结束时间之间的间隔为current_time
和end_time
之间的24小时,还有6小时完成,应该留下%25。
这怎么办?
在Python 2.7.x,时间增量有一个方法total_seconds来实现这一点:
import datetime
startTime = datetime.datetime.now() - datetime.timedelta(hours=2)
endTime = datetime.datetime.now() + datetime.timedelta(hours=4)
rest = endTime - datetime.datetime.now()
total = endTime - startTime
print "left: {:.2%}".format(rest.total_seconds()/total.total_seconds())
在Python 3.2,则可以明显地划分直接在时间增量(没有经过total_seconds)。 (这也在Python 2.6.5: Divide timedelta with timedelta中注明)
这是一个骇人的解决方法:通过使用days
,seconds
和microseconds
字段来计算两个值之间的总微秒数。然后除以区间内的总微秒数。
可能最简单的:
import time
def t(dt):
return time.mktime(dt.timetuple())
def percent(start_time, end_time, current_time):
total = t(end_time) - t(start_time)
current = t(current_time) - t(start_time)
return (100.0 * current)/total