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

如何在Java中实现支持节假日校验的当月首个工作日查询

实现当月首个工作日查询的方案

核心逻辑

  • 第一步:取当月1号作为起始校验日期
  • 第二步:从该日期开始逐日向后校验,直到找到第一个符合工作日要求的日期
  • 第三步:工作日判定逻辑做解耦设计,默认包含周末排除规则,可自行扩展法定节假日、调休、自定义假期等判定规则

提示:你已具备获取指定日期前后一日的能力,无需额外实现日期偏移的底层逻辑,可直接替换示例中的偏移代码

可复用示例代码(Python)

提前实现is_workday(date)方法用于判定是否为工作日,返回True代表是工作日,返回False代表是非工作日,你可以根据业务需求自由调整该方法内的判定规则。

from datetime import datetime

# 非工作日判定方法,可自定义修改规则
def is_workday(date):
    # 基础规则:排除周末(周一到周五对应weekday返回值0-4,周末为5、6)
    if date.weekday() >= 5:
        return False
    # 可在此处添加自定义非工作日判定规则,例如下方法定假期校验
    # 2021年11月前3天为假期的示例配置
    # custom_holidays = [datetime(2021,11,1).date(), datetime(2021,11,2).date(), datetime(2021,11,3).date()]
    # if date in custom_holidays:
    #     return False
    return True

# 核心方法:获取当月首个工作日
def get_first_workday_of_month(current_date=None):
    # 不传参默认取当前日期所在月份
    if not current_date:
        current_date = datetime.now().date()
    # 取当月1号作为起始校验点
    check_date = current_date.replace(day=1)
    while True:
        if is_workday(check_date):
            return check_date
        # 非工作日则取下一天,可直接替换为你已封装好的后一日获取方法
        check_date = check_date.replace(day=check_date.day + 1)

# 示例测试:2021年11月场景
test_date = datetime(2021,11,15).date()
print(get_first_workday_of_month(test_date))
# 输出结果为 2021-11-04,和示例要求一致

补充说明

  • 非工作日判定和核心查找逻辑完全分离,调整假期规则不需要改动查找逻辑
  • 若需避免极端场景下的死循环,可自行添加最多校验31天的限制逻辑,自然月最多只有31天,不会出现无效校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:45:08