ValueError: day is out of range for month 跨月周日期计算报错如何解决
错误根因
你当前的代码强制复用周一的年、月属性手动拼接后续日期,当日期偏移后超出当月最大天数时,就会触发ValueError: day is out of range for month报错,手动指定年月日的写法不会自动处理跨月、跨年的日期进位逻辑。
修复代码
直接基于已经正确解析的周一日期,通过timedelta累加天数即可,datetime内置逻辑会自动处理跨月、跨年场景:
import datetime # 原解析周一的逻辑保留,本身是支持ISO周解析的 monday = datetime.datetime.strptime(week + '-1', '%G-W%V-%u') # 后续日期直接用timedelta偏移,无需手动拼接年月日 tuesday = monday + datetime.timedelta(days=1) wednesday = monday + datetime.timedelta(days=2) thursday = monday + datetime.timedelta(days=3) friday = monday + datetime.timedelta(days=4) saturday = monday + datetime.timedelta(days=5) sunday = monday + datetime.timedelta(days=6)
更简洁的批量生成写法
如果不需要单独命名每一天的变量,可以直接生成整周的日期列表,索引0对应周一,索引6对应周日:
import datetime monday = datetime.datetime.strptime(week + '-1', '%G-W%V-%u') week_days = [monday + datetime.timedelta(days=i) for i in range(7)]
内容的提问来源于stack exchange,提问作者NicLovin
相关产品推荐
相关产品推荐

