打印两个日期之间的工作日期,但不包括每个周末



我正在尝试打印两个日期之间的工作日,但不包括后一个日期和周末,坚持打印。我尝试了以下代码:

from datetime import timedelta, date, datetime
def print_working_dates(date1, date2):
excluded = (6,7)
for n in range(int((date2 - date1).days)+1):
if date1.isoweekday == excluded:
continue
else: 
yield date1 + timedelta(n)

start_dt = datetime.now()
end_dt = datetime(2022, 4, 28) 
for dt in print_working_dates(start_dt, end_dt):
print(dt.strftime("%Y-%m-%d"))

它每天都在最后一个之前打印,但它可以保存所有周末。谁能请谁给一条建议来更好地定义这个函数吗?在我看来,excluded对象应该更详细,但我不知道怎么做。

首先,您可以使用in关键字检查值是否在可迭代(如元组或列表(中。isoweekday是一个函数,所以需要用isoweekday()来调用它。最后,你需要计算出新的日期,然后检查它是工作日,否则它只检查每个日期的开始日期是否是周末。

def print_working_dates(date1, date2):
excluded = (6,7)
for n in range(int((date2 - date1).days)+1):
new = date1 + timedelta(n)
if new.isoweekday() not in excluded:
yield new

我用not否定了if语句,使其更加紧凑。

首先,您没有检查是否将正确的时间设置为工作日。您必须检查(date1+timedelta(n((是否为工作日,而不是date1

其次,您必须检查isoweeday的返回值是否在排除的中

这是我对你的代码的解决方案:

from datetime import timedelta, datetime
def print_working_dates(date1, date2):
excluded = (6,7)
for n in range(int((date2 - date1).days)+1):
if (date1 + timedelta(n)).isoweekday() in excluded:
continue
else: 
yield date1 + timedelta(n)

start_dt = datetime.now()
end_dt = datetime(2022, 4, 28) 
for dt in print_working_dates(start_dt, end_dt):
print(dt.strftime("%Y-%m-%d"))

相关内容

  • 没有找到相关文章

最新更新