如何获取以当月1日为0基准的星期对应整数值
自定义月份首周星期计数实现方案
原代码的核心错误在于判断逻辑不合理:weekday() 方法的返回值范围固定为0(周一)到6(周日),永远满足departure_date.weekday() <7的条件,因此else分支永远不会触发,自然无法得到预期结果。
实现逻辑
- 对每个目标日期,先获取其所在月份的1号日期对象
- 计算目标日期和当月1号的间隔天数:间隔小于7的属于当月第一周,直接用间隔天数作为星期计数值(刚好满足当月1号为0的要求)
- 间隔大于等于7的属于当月非首周,直接使用原生
weekday()方法的返回值即可
完整实现代码
import datetime from datetime import date for day in range(1, 365): departure_date = date.today() + datetime.timedelta(days=day) # 获取当前日期所属月份的1号 first_day_of_month = departure_date.replace(day=1) # 计算当前日期和当月1号的间隔天数 delta_from_first = (departure_date - first_day_of_month).days # 按规则计算星期计数值 if delta_from_first < 7: # 首周直接用间隔天数作为计数,1号对应0 day_of_week = delta_from_first else: # 非首周使用默认周一=0、周日=6的计数规则 day_of_week = departure_date.weekday()
内容的提问来源于stack exchange,提问作者tKc
相关产品推荐
相关产品推荐

