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

如何用Python计算排除美国节假日的月度第N个工作日

如何用Python计算排除美国节假日的月度第N个工作日

要实现排除美国节假日的工作日计算,我们可以结合datetime、calendar模块,再借助holidays库处理美国节假日数据。以下是具体实现方案:

1. 安装依赖库

首先需要安装holidays库来获取美国节假日列表:

pip install holidays

2. 核心工具函数

先写一个函数判断某一天是否为排除美国节假日的工作日:

import datetime
import calendar
import holidays

def is_working_day(date):
    # 判断是否为周末(周六=5,周日=6)
    if date.weekday() >= 5:
        return False
    # 判断是否为美国节假日
    us_holidays = holidays.US(years=date.year)
    return date not in us_holidays

3. 获取当月第N个工作日

下面的函数可以返回指定年月的第N个工作日:

def get_nth_working_day(year, month, n):
    # 生成当月所有日期
    cal = calendar.Calendar()
    working_days = []
    for day, weekday in cal.itermonthdays2(year, month):
        if day == 0:
            continue  # 跳过不属于当月的日期
        current_date = datetime.date(year, month, day)
        if is_working_day(current_date):
            working_days.append(current_date)
    # 检查N是否在有效范围内
    if n < 1 or n > len(working_days):
        return None  # 无对应工作日时返回None
    return working_days[n-1]

使用示例:

# 获取2024年5月第3个工作日
third_working_day = get_nth_working_day(2024, 5, 3)
print(f"2024年5月第3个工作日:{third_working_day}")

# 获取当月第5个工作日
now = datetime.datetime.now()
fifth_working_day = get_nth_working_day(now.year, now.month, 5)
print(f"当月第5个工作日:{fifth_working_day}")

4. 判断输入日期是当月第几个工作日

如果要判断某个给定日期是当月的第几个工作日,可以用以下函数:

def get_working_day_rank(date):
    year, month = date.year, date.month
    # 生成当月所有工作日
    cal = calendar.Calendar()
    working_days = []
    for day, weekday in cal.itermonthdays2(year, month):
        if day == 0:
            continue
        current_date = datetime.date(year, month, day)
        if is_working_day(current_date):
            working_days.append(current_date)
    # 查找输入日期的位置
    if date not in working_days:
        return None  # 该日期不是工作日
    return working_days.index(date) + 1  # 从1开始计数

使用示例:

# 判断2024年5月15日是当月第几个工作日
test_date = datetime.date(2024, 5, 15)
rank = get_working_day_rank(test_date)
if rank:
    print(f"{test_date}是当月第{rank}个工作日")
else:
    print(f"{test_date}不是工作日")

说明

  • holidays.US()会自动包含联邦节假日,也支持指定州的节假日(比如holidays.US(state='CA')),可根据需求调整。
  • 函数中加入了边界检查,当N超过当月工作日总数时返回None,避免索引越界。

内容的提问来源于stack exchange,提问作者Anshika Sahay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:13:20