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

如何在AnyLogic中计算两个日期间排除节假日的工作日天数

在AnyLogic中计算两个日期间排除节假日的工作日天数

方法一:自定义函数遍历统计

如果不想依赖内置组件,可自行编写函数逐个日期判断:

  1. 提前准备好节假日列表(比如List<Date> holidays,存入所有需排除的节假日日期)
  2. 创建返回int类型的函数,参数设为Date start、Date end和List<Date> holidays
  3. 核心逻辑代码示例:
int workDays = 0;
Date currentDate = new Date(start.getTime());
while (currentDate.before(end) || currentDate.equals(end)) {
    // 判断是否为工作日(周一到周五)
    Calendar cal = Calendar.getInstance();
    cal.setTime(currentDate);
    int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
    boolean isWeekday = dayOfWeek >= Calendar.MONDAY && dayOfWeek <= Calendar.FRIDAY;
    // 判断是否不在节假日列表中
    boolean isNotHoliday = !holidays.contains(currentDate);
    
    if (isWeekday && isNotHoliday) {
        workDays++;
    }
    // 日期向后推1天
    cal.add(Calendar.DAY_OF_MONTH, 1);
    currentDate = cal.getTime();
}
return workDays;

注意:确保currentDate与节假日列表中的日期格式一致(精确到天,不含时分秒),避免因时间精度问题导致判断错误。

方法二:利用AnyLogic内置WorkCalendar组件

AnyLogic自带的工作日历组件能更高效处理这类需求,步骤如下:

  1. 从模型面板的Process库或Basic库中拖拽WorkCalendar组件到模型里
  2. 双击组件配置规则:
    • 在「Work Days」标签页设置每周工作日(默认周一到周五,可按需调整)
    • 在「Holidays」标签页添加所有需排除的节假日,支持手动添加或批量导入
  3. 在需要计算的位置直接调用组件方法:
// 假设你的WorkCalendar组件名为workCalendar
int workDays = workCalendar.getWorkDaysCount(startDate, endDate);

该方法会自动排除配置的非工作日和节假日,直接返回有效工作日天数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:05:53