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

Python datetime格式化last_date为d/m/Y报AttributeError解决

报错原因
  • 核心触发点是类型不匹配:执行data_atual = data.strftime('%d/%m/%Y')后,data_atual是字符串类型,不是date/datetime对象,本身不存在.year、.month属性,调用data_atual.year时就会抛出'str' object has no attribute 'year'的错误。
  • 代码还存在三个隐藏问题,即使修复上面的类型错误也会运行失败:
    1. 没有导入timezone类,运行到时区计算逻辑时会触发名称错误
    2. monthrange()的返回值是(当月首日星期值, 当月总天数)的二元元组,直接把元组传给date.replace()的day参数会触发类型错误,必须取索引为1的当月总天数值作为入参
    3. 原代码最后打印的是未格式化的date类型对象last_date,不是你需要的d/m/Y格式字符串
修复后可运行代码
from datetime import date
from datetime import datetime
from datetime import timedelta
from calendar import monthrange
# 补全timezone导入,若使用Python3.9+标准库zoneinfo可替换为对应导入
from pytz import timezone

data = date.today()
data_atual = data.strftime('%d/%m/%Y')
print(data_atual)


data_e_hora_atuais = datetime.now()
fuso_horario = timezone("America/Sao_Paulo")
data_e_hora_sao_paulo = data_e_hora_atuais.astimezone(fuso_horario)
data_e_hora = data_e_hora_sao_paulo.strftime("%d/%m/%Y %H:%M")
print(data_e_hora)

# 直接用原始date对象data取年月属性,从monthrange结果中提取当月总天数
_, last_day_of_month = monthrange(data.year, data.month)
last_date = data.replace(day=last_day_of_month)
last_date_formated = last_date.strftime('%d/%m/%Y')
# 打印格式化后的结果
print(last_date_formated)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:27:25