hutool.core.workday

工作日计算工具类

提供工作日判断、工作日数计算、加减工作日等功能。 默认使用中国法定节假日配置,支持自定义假日列表。

Module Contents

Classes

WorkdayUtil

工作日计算工具类。

API

class hutool.core.workday.WorkdayUtil

工作日计算工具类。

默认使用中国法定节假日配置(不含调休补班日),支持自定义假日列表。

默认假日包含:元旦、春节、清明、劳动节、端午、中秋、国庆。

备注

中国法定假日的实际日期每年可能由国务院调整(含调休), 默认配置仅覆盖固定日期部分。如需精确到具体年份的调休安排, 请通过 set_custom_holidays() 传入完整假日列表。

STATIC_HOLIDAYS: List[Tuple[int, int]] = [(1, 1), (5, 1), (10, 1), (10, 2), (10, 3)]
_custom_holidays: Optional[dict] = None
classmethod set_custom_holidays(holidays: Optional[List[datetime.date]]) None

设置自定义假日列表,覆盖默认的中国法定假日。

传入 None 可清除自定义配置,恢复默认。

参数:

holidays – 自定义假日日期列表,或 None 清除

>>> from datetime import date
>>> WorkdayUtil.set_custom_holidays([date(2024, 1, 1), date(2024, 2, 10)])
classmethod holidays(year: int) List[datetime.date]

获取指定年份的所有法定假日。

如果已设置自定义假日,则返回自定义假日;否则返回中国法定假日。

参数:

year – 年份

返回:

假日日期列表

>>> holidays = WorkdayUtil.holidays(2024)
>>> date(2024, 1, 1) in holidays
True
classmethod _is_holiday(dt: datetime.date) bool

判断日期是否为假日。

classmethod is_workday(dt: datetime.date | datetime.datetime) bool

判断指定日期是否为工作日。

工作日 = 非周末 且 非法定假日。

参数:

dt – 日期对象

返回:

是否为工作日

>>> from datetime import date
>>> WorkdayUtil.is_workday(date(2024, 1, 2))  # 周二,非假日
True
>>> WorkdayUtil.is_workday(date(2024, 1, 1))  # 元旦
False
classmethod next_workday(dt: datetime.date | datetime.datetime) datetime.date

获取下一个工作日。

参数:

dt – 起始日期

返回:

下一个工作日

>>> from datetime import date
>>> WorkdayUtil.next_workday(date(2024, 1, 5))  # 周五
date(2024, 1, 8)
classmethod previous_workday(dt: datetime.date | datetime.datetime) datetime.date

获取上一个工作日。

参数:

dt – 起始日期

返回:

上一个工作日

>>> from datetime import date
>>> WorkdayUtil.previous_workday(date(2024, 1, 8))  # 周一
date(2024, 1, 5)
classmethod workdays(start: datetime.date | datetime.datetime, end: datetime.date | datetime.datetime) int

计算两个日期之间的工作日数(含首日和末日)。

如果 start > end,返回负数。

参数:
  • start – 起始日期

  • end – 结束日期

返回:

工作日数

>>> from datetime import date
>>> WorkdayUtil.workdays(date(2024, 1, 1), date(2024, 1, 5))
3
classmethod _workdays_count(start: datetime.date, end: datetime.date) int

计算 start 到 end(含两端)之间的工作日数。

classmethod add_workdays(dt: datetime.date | datetime.datetime, count: int) datetime.date

日期加减指定工作日数。

正数向后加工作日,负数向前减工作日。

参数:
  • dt – 起始日期

  • count – 工作日数(可为负数)

返回:

目标日期

>>> from datetime import date
>>> WorkdayUtil.add_workdays(date(2024, 1, 1), 5)
date(2024, 1, 8)
classmethod workday_hours(start: datetime.datetime, end: datetime.datetime, workday_hours_per_day: int = 8) float

计算两个 datetime 之间的工作小时数。

仅计算工作日的工作时间(每天 workday_hours_per_day 小时,从 09:00 开始)。 非工作日不计入。

参数:
  • start – 起始时间

  • end – 结束时间

  • workday_hours_per_day – 每日工作小时数,默认 8

返回:

工作小时数

static easter(year: int) datetime.date

计算复活节日期(Meeus/Jones/Butcher 算法,适用于 1900-2099)。

参数:

year – 年份

返回:

复活节 date 对象

>>> WorkdayUtil.easter(2024)
date(2024, 3, 31)

获取复活节相关节假日列表。

包括:圣灰星期三、棕枝主日、耶稳升天节、五旬节、基督圣体节。

参数:

year – 年份

返回:

(日期, 节日名) 列表