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

Python datetime时间相减负差值显示异常是bug还是预设特性?

问题判定

这个现象不是bug,属于Python datetime 模块的预设设计特性。

设计逻辑说明
  • 两个datetime对象相减得到的timedelta类型,内部存储遵循固定规范:仅days属性允许为负数,seconds、microseconds属性永远保持非负取值。
  • 你观察到的-1 day, 18:50:00 实际数值等价于 -24小时 + 18小时50分钟 = -5小时10分钟,和预期的计算结果完全一致,差异仅在于默认的字符串展示格式不符合直觉。
自定义格式化解决方案

如果需要输出和直觉一致的正负时分格式,可以自行封装timedelta格式化函数,参考实现如下:

def format_timedelta(td):
    total_sec = int(td.total_seconds())
    prefix = "-" if total_sec < 0 else ""
    abs_sec = abs(total_sec)
    hours = abs_sec // 3600
    minutes = (abs_sec % 3600) // 60
    return f"{prefix}{hours}h{minutes}m"

# 代入测试代码
import datetime 

dep = datetime.datetime(2021, 9, 11, 7, 25)
arr = datetime.datetime(2021, 9, 11, 12, 35)

print(f"expected: -5h10m, real: {format_timedelta(dep - arr)}")
print(f"expected: 5h10m, real: {format_timedelta(arr - dep)}")

运行后输出结果:

expected: -5h10m, real: -5h10m
expected: 5h10m, real: 5h10m

内容的提问来源于stack exchange,提问作者Petr Dvořáček

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:00