一百零二 我开发了一个定制的作业(job)调度程序,需要在给定的日期运行.它将开始日期和结束日期作为字符串,第三个参数是作业(job)应该运行的星期列表. 开始日期可以与给定日期不同,但第一个作业(job)应在下一个有效日期运行 假设开始日期是2022-09-07(因此日期名称是星期三),但是给定的频率天数是["Monday", "Friday", "Saturday"],因此我需要在下一个星期五运行我的第一个作业(job),为此,我需要计算开始日期和第一个有效日期(在本例中是星期五)之间的差值

那么,我如何才能在有效日期(即可以在给定频率天数列表中的任何位置)运行我的第一个作业(job),并且在一个作业(job)完成后,我还需要获得下一个有效日期.我做了一些工作,但不幸的是它不起作用.这就是我所做的

sorted_week_days_list = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
start_date = "2022-09-07"

valid_frequency_days = ["Monday", "Tuesday", "Friday"] # It can be any days in sorted order

start_date_object = datetime.datetime.strptime(start_date, "%Y-%m-%d")

given_start_day = start_date_object.strftime("%A")

if given_start_day not in valid_frequency_days:
    # Need help to implement logic to get date for valid day

推荐答案

您应该使用datetime.weekday()方法来提取感兴趣的天数的星期几.假设您有类似于上面显示的格式的日期,则很容易进行转换,并且只需将日期索引用于您的"允许开始日期"(星期一=0).

然后,你可以设置一个小函数,在你的sorted人列表中寻找下一个开始日期,并计算出你需要等待多少天.

下面的示例做到了这一点,并根据需要"滚动"了周末.

代码:

from datetime import datetime, timedelta
from bisect import bisect_left

start_date = "2022-09-09"

valid_start_dates = [1, 4] # It can be any days in sorted order

start_date_object = datetime.strptime(start_date, "%Y-%m-%d")

d=start_date_object.weekday()
print(f'the numbered day of the week is: {d}')

def days_till_start(day, valid_start_days):
    idx = bisect_left(valid_start_days, day)
    if idx >= len(valid_start_days): # wrap around to next start
        return valid_start_days[0] + 7 - day
    elif day == valid_start_days[idx]:
        return 0
    else:
        return valid_start_days[idx] - day

print(days_till_start(d, valid_start_dates))

start_dates = ['2022-09-05', '2022-09-06', '2022-09-07', '2022-09-08', '2022-09-09', '2022-09-10']

start_wkdys = [datetime.strptime(d, "%Y-%m-%d").weekday() for d in start_dates]

for d in start_wkdys:
    print(f'day index is: {d}')
    print(f'next start date is {days_till_start(d, valid_start_dates)} away')
    print()

输出:

the numbered day of the week is: 4
0

day index is: 0
next start date is 1 away

day index is: 1
next start date is 0 away

day index is: 2
next start date is 2 away

day index is: 3
next start date is 1 away

day index is: 4
next start date is 0 away

day index is: 5
next start date is 3 away

Python-3.x相关问答推荐

网站抓取:当我使用Chrome DevTools中的网络选项卡时,找不到正确的URL来提供我想要的数据

如何获得大Pandas 的常见时间间隔

在Python代码中包含NAN值时,以两个矩阵计算RMSE

向前/向后移动导致移动行的数据不可见

在不使用 split 函数的情况下从字符串中分割逗号(','),句号('.')和空格(' '),将字符串的单词附加到列表中

如何获取自定义文件上传路径的对象ID?

如何获取实例化 `types.GenericAlias` 的下标类?

「Python Pandas」多级索引列和行匹配,如果列和行名称相似,则排除这些单元格中的值添加

调用 Clear 时 Airflow 会加载新代码吗

过滤列表中的所有字典以使用特定键并忽略其他键?

如何从形状汇总图中提取实际值

Einsum 对于张量乘法很慢

如何在python中将列表转换为其他格式

Python3四舍五入到最接近的偶数

IronPython 3 支持?

使用 Python3 与 HDFS 交互的最佳模块是什么?

python 3的蓝牙库

在 ubuntu 20.04 中安装 libpq-dev 时出现问题

如何从 Python 3 导入 FileNotFoundError?

如何在 Python 3.4 中使用 pip 3?