Python 如何计算日期范围内的秒数,仅计算特定的小时和/或天?

Python 如何计算日期范围内的秒数,仅计算特定的小时和/或天?,python,datetime,rrule,Python,Datetime,Rrule,我需要计算一个事件在两个日期之间活动的精确秒数。但是,事件可能有其他限制-它可能仅在一周中的某些时段和/或几天内处于活动状态 我尝试使用频率为rrule.secondary的rrule,但该函数需要2-3秒才能运行-并且该计算需要非常快,大约3毫秒。我使用rrule.HOURLY并乘以3600 我实现了一个如下所示的系统,但它有一个缺点,在本例中,它不计算结束日期16:00小时后的28分钟和开始日期16:00小时后的10分钟 例如: from datetime import datetime f

我需要计算一个事件在两个日期之间活动的精确秒数。但是,事件可能有其他限制-它可能仅在一周中的某些时段和/或几天内处于活动状态

我尝试使用频率为
rrule.secondary
的rrule,但该函数需要2-3秒才能运行-并且该计算需要非常快,大约3毫秒。我使用
rrule.HOURLY
并乘以3600

我实现了一个如下所示的系统,但它有一个缺点,在本例中,它不计算结束日期16:00小时后的28分钟和开始日期16:00小时后的10分钟

例如:

from datetime import datetime
from dateutil import rrule

time_slot = {'start': "173000", 'end': "180000"}
start_date = datetime(2015, 3, 5, 16, 50)
end_date = datetime(2015, 3, 27, 16, 28)

start_hour = int(time_slot.get('start', '000000')[0:2])
end_hour = int(time_slot.get('end', '235959')[0:2])
start_minute = int(time_slot.get('start', '000000')[2:4])
end_minute = int(time_slot.get('end', '235959')[2:4])
time_slot_hours = []
time_slot_minutes = []

if start_minute:
    time_slot_minutes.append({'hour': start_hour, 'minutes': [m for m in range(start_minute, 60)]})
    start_hour += 1

if end_minute:
    time_slot_minutes.append({'hour': end_hour, 'minutes': [m for m in range(0, end_minute)]})

for hour in range(start_hour, end_hour):
    time_slot_hours.append(hour)

active_seconds = 60 * 60 * len(list(rrule.rrule(rrule.HOURLY, byhour=time_slot_hours, dtstart=start, until=end)))
for m in time_slot_minutes:
    active_seconds += 60 * len(list(rrule.rrule(rrule.MINUTELY, byminute=m['minutes'], byhour=m['hour'], dtstart=start, until=end)))

有没有更优雅的方法来解决这个问题?

该库提供了一些非常广泛的缓存,如果启用它,这可能会帮助您解决速度缓慢的问题。