You need to enable JavaScript to run this app. Python打印距当前一个月前的日期且保留原有YYYY-MM-DD格式
优惠活动
大模型
产品
解决方案
定价
更多

Python打印距当前一个月前的日期且保留原有YYYY-MM-DD格式

实现逻辑

你最终需要保持的输出格式为date.today()默认打印的YYYY-MM-DD结构,全程不改动现有日期格式的前提下实现向前偏移1个自然月的需求即可。

需要注意的是,Python 原生datetime模块的timedelta仅支持固定时长偏移,无法直接适配不同月份的天数差异、跨年边界等场景,直接用天数减的方式会出现计算错误。你可以根据自身需求选择以下两种实现方式:

无第三方依赖的原生实现

该方式返回的日期对象和你当前使用的date.today()完全为同一类型,直接打印的输出结构和你现有代码的效果没有任何差异:

from datetime import date
import calendar

def get_previous_month_date(today: date) -> date:
    # 计算偏移后的目标年月
    target_month = today.month - 1
    target_year = today.year
    # 处理1月向前偏移至上一年12月的边界
    if target_month == 0:
        target_month = 12
        target_year -= 1
    # 适配目标月无对应日号的场景(如3月31日偏移到2月时无31日,自动取目标月最后一天)
    target_month_max_day = calendar.monthrange(target_year, target_month)[1]
    target_day = min(today.day, target_month_max_day)
    return date(target_year, target_month, target_day)

# 你原有获取当日日期的逻辑完全保留
tday = date.today()
pre_month_date = get_previous_month_date(tday)

# 打印输出格式与原有print(tday)的YYYY-MM-DD结构完全一致
print(pre_month_date)
  • 自动处理所有日期边界场景,不会出现因日期不存在抛出的运行错误
  • 全程不修改原有日期对象的结构,无需额外做格式转换

依赖成熟库的简化实现

如果不需要零依赖的原生代码,可以通过成熟的日期工具库减少边界判断的代码量,最终返回的日期对象打印格式同样和你现有结构完全匹配:

# 需先安装依赖:pip install python-dateutil
from datetime import date
from dateutil.relativedelta import relativedelta

# 你原有获取当日日期的逻辑完全保留
tday = date.today()
# 直接实现向前偏移1个自然月
pre_month_date = tday - relativedelta(months=1)

print(pre_month_date)
  • 所有月份计算、边界适配逻辑均由库内部完成,仅需1行代码实现偏移
  • 返回值为原生date类型,打印输出严格遵循你现有YYYY-MM-DD的格式要求

另外你现有代码中导入的formatdate、未被调用的datetime模块属于冗余导入,删除后不会影响现有日期输出效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 23:27:03