Python如何使用datetime模块计算两个datetime时间的中间值
解答
你写的公式不能直接用,存在两个核心问题:
- 运算优先级错误:Python中除法优先级高于加减法,你写的
max_time - min_time / 2 + min_time会优先计算min_time / 2,而datetime对象本身不支持直接和整数做除法,运行会直接抛出类型错误。 - 逻辑疏漏:只有两个datetime相减得到的
timedelta(时间差)对象,才支持除以整数的运算,计算区间中点必须先算出两个时间的差值,再把一半长度的差值加给起始时间。
另外你贴的示例代码有笔误:你描述的max_time是2时50分,但代码里写的是datetime.datetime(1900, 1, 1, 2, 5)对应2时05分,这个区间的中点是1时47分30秒,得不到你要的2时10分结果。
正确实现代码
import datetime min_time = datetime.datetime(1900, 1, 1, 1, 30) # 修正笔误:将2时5分改为2时50分,和描述的时间区间一致 max_time = datetime.datetime(1900, 1, 1, 2, 50) # 正确中点计算逻辑:起始时间 + 时间差的一半 mid_time = min_time + (max_time - min_time) / 2 # 结果验证 print(mid_time.strftime("%H:%M")) # 输出 02:10 print(min_time < mid_time < max_time) # 输出 True,满足1:30 < 2:10 < 2:50的大小要求
公式修正
你的计算思路本身是对的,只是漏了给时间差计算加括号,修正后的合法公式为:mid_time = min_time + (max_time - min_time) / 2
这个逻辑完全符合数学上的区间中点计算规则,基于datetime原生模块就能实现,不需要额外依赖。
内容的提问来源于stack exchange,提问作者m_sasha
相关产品推荐
相关产品推荐

