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

