Python';在特定小时范围内工作的日期时间

Python';在特定小时范围内工作的日期时间,python,python-datetime,Python,Python Datetime,我有一个执行器,它根据用户指定的内容执行电话呼叫。 我只想在一天中的特定时间范围内安排时间,例如从上午8点到下午6点。 执行人每天24小时工作,目前正在检查数据库中的记录是否执行电话呼叫。 通过使用python的datetime并以给定的频率和调用次数设置这些工作时间,是否有任何棘手的方法来安排未来的调用。 例如,我想安排4个电话,频率为1小时。假设现在是下午4点。下次电话应安排在下午4点、下午5点和下一天-次日上午8点、10点。 我希望datetime能在如下条件下工作: def schedu

我有一个执行器,它根据用户指定的内容执行电话呼叫。
我只想在一天中的特定时间范围内安排时间,例如从上午8点到下午6点。
执行人每天24小时工作,目前正在检查数据库中的记录是否执行电话呼叫。
通过使用python的
datetime
并以给定的频率和调用次数设置这些工作时间,是否有任何棘手的方法来安排未来的调用。
例如,我想安排4个电话,频率为1小时。假设现在是下午4点。下次电话应安排在下午4点、下午5点和下一天-次日上午8点、10点。
我希望
datetime
能在如下条件下工作:

def schedule(no_of_calls: int, frequency: timedelta):
  dt = get_a_magic_datetime_with_hour_range()
  value = dt.now()  # this will get 4PM in above's example. Though if it would be 10PM it would return 8AM next day.
  for i in range(no_of_calls):
    save_to_db(value)
    value += frequency    
我知道我可以创建自己的
working\u datetime
,在工作时间范围内进行适当的验证并返回值,但可能已经有类似的东西了


如果你仍然不明白这个想法——比如停车收费表——如果你在付费时间之外付费——它将从第二天付费时间开始算起(或者如果已经过了12点也算起)。

代码应该足够自明:它除了在上午8点、9点“做点什么”之外,什么都不做。。。从2020年1月20日星期一开始,每天下午5点

请注意,我没有测试它,但至少在原则上,该策略应该是可行的。我检查了各种
if
条件和更新规则,但在启动像这样的无限循环之前再次检查它们

#/usr/bin/env python
'''
此代码执行特定(通用)操作
从每天上午8点到下午5点,每小时开始
从下周一开始,即2020年1月20日。
这意味着代码每天执行10个操作
然后在接下来的14个小时里什么都不做。
时间精度为秒。
'''
导入时间
从日期时间导入日期时间
str_begin='Jan 20 08:00:00+0000 2020'
next_action=int(datetime.timestamp(datetime.strtime(str_begin,'%b%d%H:%M:%S%z%Y'))#Unix时间戳
一小时=3600秒一小时的秒数
等待时间=14*1小时
每日计数=0
now=int(datetime.timestamp(datetime.now())
尽管如此:
如果现在==下一步行动:
#打个电话什么的
每日计数+=1
如果每日计数小于10:
下一个动作+=一小时
如果每日计数==10:#在下午5点,每日计数将为10,下一次行动将为下午6点。您将计数和下一个操作重置为上午8点。
每日计数=0
下一个动作+=等待时间
now=int(datetime.timestamp(datetime.now())

我不明白为什么第四个电话不应该在上午9点打。然而,我认为一个简单的方法是将日期转换成unix时间戳,将其作为整数处理。您还可以利用
时间。sleep(X)
可以有多个用户调用的时间表,因此我无法睡眠。包括上午8点,不包括下午6点。周六和周日?@GRquanti每天。下面的解决方案有效吗?