关于python 的时间差计算
2014-12-25 00:00
169 查看
摘要: 在刷卡取电的产品开发里,遇到了关于时间计算的一系列问题,特别记录下来
通常我们使用如下的代码计算时间差:
通常得到的数据是1。但如果是如下的代码,得到的数据是多少?
按照预想,我们希望得到的结果是-1。可惜代码不从人愿,得到的结果是86398。
为什么?我发现86398=23*3600+3598,也就是说23小时58分2秒。好像离我们的预想很近了,而后我开始考虑是否加上日期的问题。加上日期后代码就变成了如下这样
在考虑到可能出现负值变成一个>23*3600的值的情况下,我将代码修改成了:
终于,代码能够显示正常的时间差了。这段代码还有问题吗?我好像漏掉了什么。。。。。
哦,判断lngsec>23*3600,可能有两种现象存在,第一是结束时间比开始时间晚了一天,第二是开始时间大于结束时间。ok,我们来排除这个问题
测试,通过。我们就完成了计算任意两个时间之间时间差的代码。封装一下:
测试代码为
通常我们使用如下的代码计算时间差:
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)
相关文章推荐
- python中关于时间和日期函数的常用计算总结
- python中关于时间和日期函数的常用计算总结(time和datatime)
- python两个关于计算方法运行时间的修饰器
- 关于python的基础知识10--数据分析和数值计算
- 关于python科学计算中的axis取值问题
- python中关于时间和日期函数的常用计算
- python 计算两个带日期的时间差
- Oracle 时间差计算 数据库关于时间计算
- python中关于统计相关计算的库和函数
- Python关于图像熵的计算
- python中关于时间和日期函数的常用计算总结(time和datatime)
- 关于python 科学计算库的下载
- python 时间差计算
- python 时间差计算
- 关于类似朋友圈的发布时间间隔计算问题(python)
- 关于 Python 数据抓取、分析、挖掘、机器学习和Python 分布式计算内容分享
- Python中关于时间和日期函数的常用计算
- 【脚本语言系列】关于Python数值计算Pandas,你需要知道的事
- python 计算两个带日期的时间差