如何用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
相关产品推荐
相关产品推荐

