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'的错误。 - 代码还存在三个隐藏问题,即使修复上面的类型错误也会运行失败:
- 没有导入
timezone类,运行到时区计算逻辑时会触发名称错误 monthrange()的返回值是(当月首日星期值, 当月总天数)的二元元组,直接把元组传给date.replace()的day参数会触发类型错误,必须取索引为1的当月总天数值作为入参- 原代码最后打印的是未格式化的
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
相关产品推荐
相关产品推荐

