仅打印上周日期对应于工作日

时间:2018-10-31 19:59:45

标签: python date weekday

我有以下代码:

from datetime import date
from datetime import timedelta
today = datetime.date.today() 

for i in range(0,7):
    print (today - timedelta(days=i))
2018-10-31
2018-10-30
2018-10-29
2018-10-28
2018-10-27
2018-10-26
2018-10-25

我要打印的只是工作日,不包括周末。所以,我想要的结果应该是:

2018-10-31
2018-10-30
2018-10-29
2018-10-26
2018-10-25
2018-10-24
2018-10-23

在哪里可以修改我的代码以获得预期的结果?

1 个答案:

答案 0 :(得分:4)

使用datetime.date.weekday(),其中:

  

将星期几作为整数返回,其中星期一为0,星期日为6。

<label for="select-id">

产生:

2018-10-31
2018-10-30
2018-10-29
2018-10-26
2018-10-25

这为您提供了过去7天中的工作日。或者,如果您想在过去的7个工作日内考虑,

from datetime import date
from datetime import timedelta

today = date.today()

for i in range(7):
    d = today - timedelta(days=i)
    if d.weekday() < 5:            # Here
        print(d)

此版本基本相同,范围范围从7更改为10,并添加了from datetime import date from datetime import timedelta today = date.today() num_weekdays = 0 for i in range(10): d = today - timedelta(days=i) if d.weekday() < 5: print(d) num_weekdays += 1 if num_weekdays >= 7: break 计数器。当我们打印日期时,我们会增加计数器,一旦达到7,我们就会中断循环(否则,我们可能会打印8个日期,具体取决于num_weekdays的星期几)。

或者,另一种方式:

today

类似的想法,我们创建了一个名为from datetime import date from datetime import timedelta today = date.today() prev_days = [today - timedelta(days=i) for i in range(10)] # Get 10 previous days prev_days = [d for d in prev_days if d.weekday() < 5] # Filter out the weekends for d in prev_days[:7]: # Select the first 7 print(d) 的10个先前日期的列表。然后,我们通过过滤掉周末日期来过滤该列表。然后,在for循环中,我们仅循环遍历过滤列表的前7个元素,这样我们最多可以打印7个日期。