Python:给定日期和工作日查找给定工作日下一次出现的日期

Jon*_*Jon 9 python datetime timedelta

这有点难以解释,所以如果这没有多大意义,我会道歉.

我有一个程序,我正在做一些调度.其中一个设置是在某些日子每周运行一个任务.例如,每周一,周三和周五.

考虑当前任务安排在1/2/2012(即星期一)的示例,我已经有一堆代码工作到我知道下一个任务运行应该在1/2/2012之后的星期三.我需要做的就是计算周三(2012年1月4日)的实际日期.

我实际上将星期几作为date.weekday()的相应整数,所以在这种情况下我有2代表星期三.

什么是处理这样的事情的最佳方式?我觉得应该有一个相当简单的解决方案,但它不会浮现在脑海中.我正在考虑使用日历对象进行搜索以查找我想要的一周中的某一天,但这似乎有些过分.

eum*_*iro 13

使用dateutil.relativedelta:

from dateutil import relativedelta
import datetime

today = datetime.date.today()
# datetime.date(2012, 1, 3)

today + relativedelta.relativedelta(weekday=2) # 2 is Wednesday
# datetime.date(2012, 1, 4)

today + relativedelta.relativedelta(weekday=6) # 6 is Sunday
# datetime.date(2012, 1, 8)

today + relativedelta.relativedelta(weekday=1) # 1 is Tuesday
# datetime.date(2012, 1, 3)
# returns today

today + relativedelta.relativedelta(weeks=1, weekday=1)
# datetime.date(2012, 1, 10)
# returns Tuesday at least one week ahead
Run Code Online (Sandbox Code Playgroud)


aga*_*rs3 8

使用a timedelta添加日期.例如,使用某个日期d作为当前任务的计划日期,以及某天next_day(第二天您想要运行任务).

from datetime import date, timedelta
...
n = (next_day - d.weekday()) % 7 # mod-7 ensures we don't go backward in time
next_run_date = d + timedelta(days=n)
Run Code Online (Sandbox Code Playgroud)

  • 我想你想要`next_day - d.weekday()`. (2认同)