我正在尝试打印两个日期之间的工作日,但不包括后一个日期和周末,坚持打印。我尝试了以下代码:
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"))