关于python 的时间差计算

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

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)


转载于:https://my.oschina.net/u/2296951/blog/360302

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值