You need to enable JavaScript to run this app. Python如何在日期层级执行日期加减 无需处理时分秒等时间部分
优惠活动
大模型
产品
解决方案
定价
更多

Python如何在日期层级执行日期加减 无需处理时分秒等时间部分

Python纯日期加减解决方案

错误原因说明

你遇到的AttributeError: type object 'datetime.datetime' has no attribute 'timedelta'和是否需要指定时分秒参数无关,是引用逻辑错误:

  • timedelta是datetime模块下的独立类,不属于datetime.datetime类的属性
  • 如果你使用的导入语句是from datetime import datetime,当前作用域的datetime是类对象,无法调用timedelta;如果用import datetime的导入方式,则可以通过模块对象调用datetime.timedelta

纯日期层级加减实现方案

Python标准库自带date类型,本身就只存储年、月、日信息,完全不需要处理时分秒部分,刚好匹配你的需求,实现代码如下:

from datetime import datetime, timedelta

# 输入日期字符串
dt = "20210601"
# 字符串转日期对象,自动丢弃时分秒信息
date_obj = datetime.strptime(dt, "%Y%m%d").date()
# 直接做日期层级的加减计算
st_date = date_obj - timedelta(days=30)
# 转换为要求的输出格式
print(st_date.strftime("%Y-%m-%d"))

运行结果:

2021-05-02

简化调用的封装方案

如果想要更贴近你期望的dt - 30days的简洁调用形式,可以封装成工具函数:

from datetime import datetime, timedelta

def calc_date(date_str: str, offset_days: int, in_fmt: str = "%Y%m%d", out_fmt: str = "%Y-%m-%d") -> str:
    base_date = datetime.strptime(date_str, in_fmt).date()
    return (base_date + timedelta(days=offset_days)).strftime(out_fmt)

# 调用示例:日期减30天
st_date = calc_date("20210601", -30)
print(st_date)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 13:48:03