之前转载过一篇使用python dateTime模块处理时间差的文章,文章中讲解了如何按照days,hours和seconds单位来计算时间差。这里讲解一下如何使用dateTime模块按照minutes来计算时间差。
dateTime模块本身是没有minutes方式来计算时间差的,只能通过先计算出时间差,在转换成minutes来计算。一开始我是打算使用seconds方式等到时间差,然后再除以60再转换成分钟时间差。但是这种方式存在问题,可以看下下面的效果:
#时间a减去时间b,获得二者的时间差,参数为时间字符串,例如:2017-03-30 16:54:01.660
def getTimeDiff(self,timeStra,timeStrb):
if timeStra<=timeStrb:
return 0
ta = time.strptime(timeStra, "%Y-%m-%d %H:%M:%S")
tb = time.strptime(timeStrb, "%Y-%m-%d %H:%M:%S")
y,m,d,H,M,S = ta[0:6]
dataTimea=datetime.datetime(y,m,d,H,M,S)
y,m,d,H,M,S = tb[0:6]
dataTimeb=datetime.datetime(y,m,d,H,M,S)
secondsDiff=(dataTimea-dataTimeb).seconds
#两者相加得转换成分钟的时间差
minutesDiff=round(secondsDiff/60,1)
return minutesDiff
输出:60
发现输出结果为60,而不是2940。这是因为使用seconds方式计算时间差时只能算出在一天内的时间差忽略了天数,所以要得到正确的时间差,需要先计算出days的时间差,再算出seconds的时间差,两者相加再转换成minutes才是正确的时间差。
dateTime在计算时间差的时候,如果单位是秒,是无法计算出大于一天的时间差,需要先计算天的时间差,在计算秒的时间差,两者相加才能得出正确的时间差。
secondsDiff=(dataTimea-dataTimeb).seconds
daysDiff=(dataTimea-dataTimeb).days
#两者相加得转换成分钟的时间差
minutesDiff=daysDiff*1440+round(secondsDiff/60,1)
return minutesDiff
输出:2940
当然,最简单的方式是使用total_seconds的方式计算时间差,再转换成minutes的时间差。
secondsDiff=(dataTimea-dataTimeb).total_seconds()
输出:2940