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秒
两次计算的差异:
- 第一次
date + delta:完整叠加了1天+11小时,结果为2021-09-06 00:00:00,符合预期 - 第二次你只取了
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
相关产品推荐
相关产品推荐

