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
相关产品推荐
相关产品推荐

