hutool.core.workday¶
工作日计算工具类
提供工作日判断、工作日数计算、加减工作日等功能。 默认使用中国法定节假日配置,支持自定义假日列表。
Module Contents¶
Classes¶
工作日计算工具类。 |
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 – 年份
- 返回:
(日期, 节日名)列表