创建工作日历

工作日历可以在 运行时 通过特定的视图创建,在 设计时 使用带注解的 Java 接口创建。

运行时创建工作日历

组件安装完成后,可以从应用程序的主菜单打开 Business calendars 列表视图。

business calendar list

点击 Create 按钮打开 Business calendar editor(编辑器)

business calendar editor

输入下列参数:

  • Name - 日历的可读描述。

  • Code - 日历的唯一标识符。

使用编辑器中的选项卡来配置工作日和工作时间,排除节假日、休假及其他休息时间等非工作时间。

每个日历条目可包含 Mark — 标记值可用于分类,或提示某天或某时段为何有不同的工作时间。此标记可通过 getDayInfo() 方法返回。

假日

Holidays 标签页,点击 Create 添加假日和周末。

支持的假期类型:

  • Day of week – 将一周内选定的星期标记为假期。例如,可将周六和周日设为周末。

  • Specific date holiday – 将某个具体日期标记为假期。

  • Annual holiday – 标记每年同一天重复出现的假期,例如“元旦”。

  • Cron-based holiday – 使用 Quartz CRON 格式定义假期。这适用于更复杂的规则,例如“每个月的第三个星期五”或“七月的第一个星期一”。

工作日计划

Working schedule 标签页中,可以设置一周每天的工作时间。一天中可以包含多个工作时段,但是这些时段不能用重叠。

额外工作日

Additional business days 标签页中,定义必须作为工作日的日期。如果其中一个日期恰逢节假日,仍被视为工作日。也可以给这些工作日分配不同的工作时间。

设计时创建工作日历

设计时可以用带注解的 Java 接口创建工作日历,示例:

@BusinessCalendar(name = "Sample Business Calendar",
        code = "sample-business-calendar" ) (1)
public interface SampleBusinessCalendar {

    @CronHoliday(expression = "* * * 1-2 MAY ?", mark = "spring-holiday",
            description = "Early May public holidays") (2)
    @CronHoliday(expression = "* * * ? * 6#3", mark = "monthly-maintenance",
            description = "Scheduled maintenance on the third Saturday of each month")
    void cronHoliday();

    @WeeklyHoliday(value = DayOfWeek.SATURDAY, mark = "weekend",
            description = "Standard weekend day")
    @WeeklyHoliday(value = DayOfWeek.SUNDAY, mark = "weekend",
            description = "Standard weekend day") (3)
    void weeklyHolidays();

    @FixedDayHoliday(fixedDate = "2026-01-02", mark = "maintenance", description = "Scheduled maintenance") (4)
    @FixedDayHoliday(fixedDate = "2026-03-04", mark = "company-holiday", description = "Company day off")
    void fixedHoliday();

    @FixedYearlyHoliday(month = Month.NOVEMBER, dayOfMonth = 4, mark = "regional", description = "Annual regional holiday") (5)
    @FixedYearlyHoliday(month = Month.JUNE, dayOfMonth = 8, mark = "regional", description = "Annual regional holiday")
    void fixedYearlyHoliday();

    @ScheduledBusinessDay(dayOfWeek = DayOfWeek.MONDAY,
            startTime = "08:00", endTime = "17:00", mark = "regular-hours") (6)
    @ScheduledBusinessDay(dayOfWeek = DayOfWeek.WEDNESDAY,
            startTime = "09:00", endTime = "17:00", mark = "late-start")
    @ScheduledBusinessDay(dayOfWeek = DayOfWeek.FRIDAY,
            startTime = "10:00", endTime = "15:00", mark = "short-day")
    void scheduledBD();

    @AdditionalBusinessDay(fixedDate = "2026-05-06",
            startTime = "10:00", endTime = "16:30", mark = "holiday-shift") (7)
    @AdditionalBusinessDay(fixedDate = "2026-07-08",
            startTime = "10:00", endTime = "16:30", mark = "extra-workday")
    void additionalBD();
}
1 设计时工作日历是一个使用 @BusinessCalendar 注解的 Java 接口。该注解需要两个参数:
  • name - 日历的可读描述。

  • code - 日历的唯一标识符。

2 @CronHoliday 使用 Quartz CRON 表达式定义假期。适用于复杂或重复的规则。使用 mark 作为短标签。可添加 description 提供可读的说明。
3 @WeeklyHoliday 将一周中的特定几天定义为假期(例如周末)。使用 mark 作为短标签。可添加 description 提供可读的说明。
4 @FixedDayHoliday 为特定日期定义假期。使用 mark 作为短标签。可添加 description 提供可读的说明。
5 @FixedYearlyHoliday 定义每年同一天重复出现的假期。使用 mark 作为短标签。可添加 description 提供可读的说明。
6 @ScheduledBusinessDay 设置常规工作日,包括开始和结束时间。使用 mark 作为短标签。
7 AdditionalBusinessDay 添加常规安排之外的工作日(例如调休工作日)。使用 mark 作为短标签。
设计时创建的工作日历会显示在所有业务日历的列表中,但无法进行编辑。
business calendars