gpt4 book ai didi

python - 检查列表中的任何时间是否在两个时间戳之间

转载 作者:太空宇宙 更新时间:2023-11-03 21:30:24 25 4
gpt4 key购买 nike

我正在用Python实现一些计划任务。主程序全天候(24/7)运行,并以类似于 cron 的方式运行各个任务。我需要确定是否应该多次再次运行任务。

在这种情况下,我将获得任务上次运行的时间、当前时间(均为 Unix 时间戳,通过 datetime.datetime.utcnow().timestamp() 获取)和可以轻松转换为 datetime.datetime 对象),以及预定时间(例如每小时每 15 分钟一次,如 0:151:15, ..., 23:15)。我想确定是否有任何计划时间在上次运行时间和当前时间之间,可能是一个 bool 值。保证安排的时间始终是“时间”(例如“2:00”)并且不涉及“日期”(例如任何月份的 1 号或任何星期一)。

示例数据:

import datetime

scheduled = [datetime.time(h, m) for h, m in [(0, 15), (6, 15), (12, 15), (18, 15)]]
previous = datetime.datetime(2018, 11, 30, 5)
truthy = datetime.datetime(2018, 11, 30, 7)
falsey = datetime.datetime(2018, 11, 30, 6)

# some_method() is what I want
assert some_method(scheduled, previous, falsey) is False
assert some_method(scheduled, previous, truthy) is True

这里有一些我也想介绍的特殊情况

scheduled = [datetime.time(1, 0)]  # 1:00 AM
previous = datetime.datetime(2018, 11, 30, 23)
truthy = datetime.datetime(2018, 12, 1, 2, 0)
falsey = datetime.datetime(2018, 12, 1, 0, 30)

assert some_method(scheduled, previous, falsey) is False
assert some_method(scheduled, previous, truthy) is True

上面的示例应该为True,因为计划时间“凌晨 1 点”介于“11 月 30 日晚上 11 点”和“12 月 1 日凌晨 2 点”之间。我无法直接比较时间,因为“1 AM”不是同一天的“2 AM”和“11 PM”之间,而是不同天的两个时间之间的时间。

最佳答案

一个简单的方法似乎是以下函数:

def some_method(scheduled, prev, next):
date1 = prev.date()
date2 = next.date()
if (next - prev).total_seconds() > 86400:
return True
for s in scheduled:
for date in {date1, date2}:
temp = datetime.datetime(date.year, date.month, date.day, s.hour, s.minute, s.second)
if prev < temp < next:
return True
return False

我会把它留给其他人来美化它,但这似乎有效。

关于python - 检查列表中的任何时间是否在两个时间戳之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53559907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com