得到下一个工作日的日期

Alf*_*bel 4 python date

我正在检查当前日期是否是工作日,如果不是,我想获得下一个工作日.工作日是周一至周五.

这是我尝试过的:

import time
from datetime import date,timedelta
dmy=time.strftime("%d-%m-%Y")# getting the current date 
if dmy.strftime("%w") in set([6,7]): # checking if its a weekend( Sat/Sun) , if so advancing
    dmy=time.strftime("%d-%m-%Y")+ timedelta(days=dmy.strftime("%w")%5) # this statement is not working, it errors out .  
Run Code Online (Sandbox Code Playgroud)

声明dmy=time.strftime("%d-%m-%Y")+ timedelta(days=dmy.strftime("%w")%5))不起作用.什么是进入下一个工作日的最简单方法?

jon*_*rpe 10

你应该使用实际的date对象,而不是字符串:

>>> import datetime
>>> today = datetime.date.today()
>>> if today.isoweekday() in set((6, 7)):
    today += datetime.timedelta(days=today.isoweekday() % 5)


>>> today
datetime.date(2014, 9, 30)
Run Code Online (Sandbox Code Playgroud)

请注意,isoweekday1(星期一)至7(星期日),而weekday06.


此外,请注意您的逻辑目前在星期六和星期日的两天增加了一天,这是不正确的 - 我想你想要:

>>> if today.isoweekday() in set((6, 7)):
    today += datetime.timedelta(days=8 - today.isoweekday())
Run Code Online (Sandbox Code Playgroud)

例如:

>>> day = datetime.date(2014, 10, 4)
>>> day
datetime.date(2014, 10, 4) # Saturday
>>> if day.isoweekday() in set((6, 7)):
    day += datetime.timedelta(days=8 - day.isoweekday())


>>> day
datetime.date(2014, 10, 6) # Monday
Run Code Online (Sandbox Code Playgroud)