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

如何用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

关键说明

  1. 工作日过滤逻辑:day.weekday()方法返回值中,0代表周一,4代表周五,5是周六,6是周日,因此day.weekday() < 5可精准筛选出所有工作日。
  2. 索引对应关系: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:01:12