一个日期范围内有多少个工作日、节假日或周末

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)