一个日期范围内有多少个工作日、节假日或周末
How many weekdays, holidays or weekend days are within a dates range
我有一个代码,我用它来处理操作班次的数据。
其中,我有用于班次开始和结束的数组(例如,shift_start[0] 和 shift_end[0] 用于班次 #1),对于它们之间的时间,我需要知道有多少工作日、节假日或周末。
我已经在日期时间条目数组中定义的假期,它应该代表特定国家/地区的假期(它与 here 不同,我不在这里寻求更多动态选项).
所以基本上我是这样的:
started = [datetime.datetime(2022, 2, 1, 0, 0), datetime.datetime(2022, 2, 5, 8, 0), datetime.datetime(2022, 2, 23, 11, 19, 28)]
ended = [datetime.datetime(2022, 2, 2, 16, 0), datetime.datetime(2022, 2, 5, 17, 19, 28), datetime.datetime(2022, 4, 26, 12, 30)]
holidays = [datetime.datetime(2022, 1, 3), datetime.datetime(2022, 3, 3), datetime.datetime(2022, 4, 22), datetime.datetime(2022, 4, 25)]
我正在寻找遍历 3 个范围中的每一个范围并匹配它包含的天数的选项(例如,第一个范围应包含 2 个工作日,第二个 - 一个周末)
所以根据@gimix 的建议,我能够开发出我需要的东西:
for each_start, each_end in zip(started, ended): # For each period
for single_date in self.daterange(each_start, each_end): # For each day of each period
# Checking if holiday or weekend
if (single_date.replace(hour=0, minute=0, second=0) in holidays) or (single_date.weekday() > 4):
set_special_days_worked(1)
# If not holiday or weekend, then it is regular working day
else:
set_regular_days_worked(1)
我有一个代码,我用它来处理操作班次的数据。
其中,我有用于班次开始和结束的数组(例如,shift_start[0] 和 shift_end[0] 用于班次 #1),对于它们之间的时间,我需要知道有多少工作日、节假日或周末。
我已经在日期时间条目数组中定义的假期,它应该代表特定国家/地区的假期(它与 here 不同,我不在这里寻求更多动态选项).
所以基本上我是这样的:
started = [datetime.datetime(2022, 2, 1, 0, 0), datetime.datetime(2022, 2, 5, 8, 0), datetime.datetime(2022, 2, 23, 11, 19, 28)]
ended = [datetime.datetime(2022, 2, 2, 16, 0), datetime.datetime(2022, 2, 5, 17, 19, 28), datetime.datetime(2022, 4, 26, 12, 30)]
holidays = [datetime.datetime(2022, 1, 3), datetime.datetime(2022, 3, 3), datetime.datetime(2022, 4, 22), datetime.datetime(2022, 4, 25)]
我正在寻找遍历 3 个范围中的每一个范围并匹配它包含的天数的选项(例如,第一个范围应包含 2 个工作日,第二个 - 一个周末)
所以根据@gimix 的建议,我能够开发出我需要的东西:
for each_start, each_end in zip(started, ended): # For each period
for single_date in self.daterange(each_start, each_end): # For each day of each period
# Checking if holiday or weekend
if (single_date.replace(hour=0, minute=0, second=0) in holidays) or (single_date.weekday() > 4):
set_special_days_worked(1)
# If not holiday or weekend, then it is regular working day
else:
set_regular_days_worked(1)