如何用Python按序号获取指定月份的工作日日期?
解决根据月份内序号获取对应工作日日期的问题
你的问题核心在于当前代码生成的ordinal_date列表包含了所有日期(包括周六和周日),直接按索引取值会包含非工作日。只需在生成列表时添加工作日过滤条件即可解决:
修改后的代码
import calendar from datetime import date c = calendar.Calendar(firstweekday=calendar.SUNDAY) year = 2022 month = 11 # 生成当月所有日期,并过滤掉周六和周日 workdays = [ day for week in c.monthdatescalendar(year, month) for day in week if day.month == month and day.weekday() < 5 ] # 获取第8个工作日(列表为0索引,第N个对应索引N-1) print(workdays[7]) # 输出: 2022-11-10
关键说明
- 工作日过滤逻辑:
day.weekday()方法返回值中,0代表周一,4代表周五,5是周六,6是周日,因此day.weekday() < 5可精准筛选出所有工作日。 - 索引对应关系:Python列表采用0索引,要获取第N个工作日,需使用
workdays[N-1]。比如示例中的第4个工作日取workdays[3],结果为2022-11-07;第21个工作日取workdays[20],结果为2022-11-29,完全符合预期。
验证结果
运行代码后,workdays列表为当月有序工作日集合:
[date(2022, 11, 1), date(2022, 11, 2), date(2022, 11, 3), date(2022, 11, 4), date(2022, 11, 7), date(2022, 11, 8), date(2022, 11, 9), date(2022, 11, 10), date(2022, 11, 11), date(2022, 11, 14), date(2022, 11, 15), date(2022, 11, 16), date(2022, 11, 17), date(2022, 11, 18), date(2022, 11, 21), date(2022, 11, 22), date(2022, 11, 23), date(2022, 11, 24), date(2022, 11, 25), date(2022, 11, 28), date(2022, 11, 29), date(2022, 11, 30)]
其中第8个元素(索引7)正是2022-11-10,与需求一致。
内容的提问来源于stack exchange,提问作者Gizelly
相关产品推荐
相关产品推荐

