您的位置:首页 > 编程语言 > Python开发

关于python 的时间差计算

2014-12-25 00:00 148 查看
摘要: 在刷卡取电的产品开发里,遇到了关于时间计算的一系列问题,特别记录下来

通常我们使用如下的代码计算时间差:

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: