Python计算时间差时如何始终获取正向非负的时间间隔
计算始终向前的时分时间间隔
用Python datetime计算两个不带日期的时分时间差时,直接做差会出现结束时间早于开始时间时得到负间隔的问题,导致时间计算往回回溯。
初始写法的异常表现
最开始直接对两个解析出的时间对象做差:
import datetime time_1 = datetime.datetime.strptime('18:00',"%H:%M") time_2 = datetime.datetime.strptime('05:00',"%H:%M") time_interval = time_2 - time_1
运行后得到的间隔值为:
datetime.timedelta(days=-1, seconds=39600)
把这个间隔和指定的基准时间做加法验证:
low_date = datetime.datetime(2000, 1, 1, 18, 0) low_date + time_interval
得到的结果是datetime.datetime(2000, 1, 1, 4, 0),相当于从18点往回倒推了13个小时,完全不符合需求。
计算规则要求
时间差需要始终按向前累加的方向计算:
- 当
time_2的时分晚于等于time_1时,按当日时间计算间隔,比如time_2为21:00时,就是当天晚上9点,和18:00的间隔为3小时 - 当
time_2的时分早于time_1时,time_2自动识别为次日的时间,比如示例里的05:00,应当算作次日凌晨5点,和18:00的间隔为11小时
修复方案
计算完初始间隔后加一层判断,如果间隔的天数为负,直接取间隔内的正秒数重新构造0天的timedelta即可:
if time_interval.days < 0: time_interval = datetime.timedelta( days=0, seconds=time_interval.seconds )
这个写法可以同时覆盖两种场景:跨天的情况会自动把负的1天去掉,剩下的秒数就是正向的间隔时长;不跨天的情况初始间隔天数为0,不会触发修正逻辑,结果保持正确。
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

