我正在嘗試列印兩個日期之間的作業日,但不包括后一個日期和周末,保留在那里。我試過以下代碼:
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物件應該更詳細,但我不知道如何。
uj5u.com熱心網友回復:
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
我已經否定了 if 陳述句,not以使其更緊湊。
uj5u.com熱心網友回復:
首先,您沒有檢查正確的時間是否是作業日,您必須檢查 (date1 timedelta(n)) 是否是作業日,而不是 date1
其次,您必須檢查 isoweekday 的回傳值是否在排除范圍內
這是我對您的代碼的解決方案:
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"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/452150.html
上一篇:設定向量的可接受輸入范圍
下一篇:在R中使用rlang替代eval
