通常我们使用如下的代码计算时间差:
from datetime import datetime
import time
starttime=datetime.now()
time.sleep(1)
endtime=datetime.now()
print (endtime-starttime).seconds
通常得到的数据是1。但如果是如下的代码,得到的数据是多少?
from datetime import datetime
import time
endtime=datetime.now() #endtime和starttime调换了顺序
time.sleep(1)
starttime=datetime.now()
print (endtime-starttime).seconds
按照预想,我们希望得到的结果是-1。可惜代码不从人愿,得到的结果是86398。
为什么?我发现86398=23*3600+3598,也就是说23小时58分2秒。好像离我们的预想很近了,而后我开始考虑是否加上日期的问题。加上日期后代码就变成了如下这样
from datetime import datetime
import time
endtime=datetime.now() #endtime和starttime调换了顺序
time.sleep(1)
starttime=datetime.now()
print (endtime-starttime).days*3600+(endtime-starttime).seconds
在考虑到可能出现负值变成一个>23*3600的值的情况下,我将代码修改成了:
from datetime import datetime
import time
endtime=datetime.now()
time.sleep(1)
starttime=datetime.now()
lngday=(endtime-starttime).days
lngsec=(endtime-starttime).seconds
if lngsec>23*3600:
lngsec=lngsec-23*3600
print lngdays*3600+lngsec
终于,代码能够显示正常的时间差了。这段代码还有问题吗?我好像漏掉了什么。。。。。
哦,判断lngsec>23*3600,可能有两种现象存在,第一是结束时间比开始时间晚了一天,第二是开始时间大于结束时间。ok,我们来排除这个问题
from datetime import datetime
import time
endtime=datetime.now()
time.sleep(1)
starttime=datetime.now()
lngday=(endtime-starttime).days
lngsec=(endtime-starttime).seconds
if lngsec>23*3600 and lngday==-1:
lngsec=lngsec-23*3600
print lngdays*3600+lngsec
测试,通过。我们就完成了计算任意两个时间之间时间差的代码。封装一下:
def SecondsDiff(starttime,endtime):
lngday=(endtime-starttime).days
lngsec=(endtime-starttime).seconds
if lngsec>3600*23 and lngday==-1:
lngsec=lngsec-3600*23
return lngday*3600+lngsec
测试代码为
from datetime import datetime
import time
def SecondsDiff(starttime,endtime):
lngday=(endtime-starttime).days
lngsec=(endtime-starttime).seconds
if lngsec>3600*23 and lngday==-1:
lngsec=lngsec-3600*23
return lngday*3600+lngsec
starttime=datetime.strptime('2014-12-24 12:30:00','%Y-%m-%d %H:%M:%S')
endtime=datetime.strptime('2014-12-25 12:29:00','%Y-%m-%d %H:%M:%S')
print SecondsDiff(starttime,endtime)
starttime=datetime.strptime('2014-12-24 12:30:00','%Y-%m-%d %H:%M:%S')
endtime=datetime.strptime('2014-12-24 12:29:00','%Y-%m-%d %H:%M:%S')
print SecondsDiff(starttime,endtime)
starttime=datetime.strptime('2014-12-24 12:30:00','%Y-%m-%d %H:%M:%S')
endtime=datetime.strptime('2015-12-24 12:29:00','%Y-%m-%d %H:%M:%S')
print SecondsDiff(starttime,endtime)