打印两个日期之间的工作日期但不包括每个周末
Printing working dates between two dates but excluding every weekends
我正在尝试打印两个日期之间的工作日,但不包括后一个日期和周末,保留在那里。我试过以下代码:
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
其次,您必须检查 isoweekday 的 return 值是否为 in 排除的
这是我对您的代码的解决方案:
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"))
我正在尝试打印两个日期之间的工作日,但不包括后一个日期和周末,保留在那里。我试过以下代码:
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
其次,您必须检查 isoweekday 的 return 值是否为 in 排除的
这是我对您的代码的解决方案:
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"))