You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3 datetime模块时间差运算结果不一致问题求助

问题原因

你对Python timedelta 对象的属性设计理解有误:
Python的timedelta会把时间差拆分为**days(天)、seconds(秒)、microseconds(微秒)**三个独立字段存储,其中seconds字段仅存储不足1天的秒数,取值范围固定在0~86399之间,并不是时间差的总秒数。

你的场景实际计算逻辑

你代码中delta = mon - date的实际拆分结果:

  • 两个时间点的差值是1天11小时,所以delta.days = 1
  • 不足1天的11小时换算为秒是11 * 3600 = 39600,所以delta.seconds = 39600
  • 要获取时间差的总秒数,需要调用delta.total_seconds()方法,结果为 1*86400 + 39600 = 126000秒

两次计算的差异:

  1. 第一次date + delta:完整叠加了1天+11小时,结果为2021-09-06 00:00:00,符合预期
  2. 第二次你只取了delta.seconds构造timedelta,相当于只叠加了11小时,所以结果为2021-09-04 13:00 + 11小时 = 2021-09-05 00:00:00

修复方法

如果要通过秒数构造完整的时间差对象,替换为total_seconds()方法即可:

import datetime

date = datetime.datetime(2021,9,4,13,00)
mon = datetime.datetime(2021, 9, 6, 0, 0)
delta = mon - date
print(date + delta)
print(date + datetime.timedelta(seconds=delta.total_seconds()))

修改后两次输出结果完全一致。


内容的提问来源于stack exchange,提问作者Kortez Kortez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:27:02