2014-09-30 144 views
2

我要檢查當前日期是否是工作日,如果不是,我想得到下一個工作日。平日從星期一到星期五。得到下一個工作日的日期

這是我曾嘗試:

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 . 

聲明dmy=time.strftime("%d-%m-%Y")+ timedelta(days=dmy.strftime("%w")%5))不工作。進入下一個工作日的最簡單方法是什麼?

+1

定義'不工作'更好。 – 2014-09-30 15:34:04

回答

8

你應該用實際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) 

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


另外請注意,你的邏輯目前增加了一天週六兩天至週日,這是不正確 - 我想你想:

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

例如:

>>> 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 
+0

@ jonrsharpe,謝謝!,這是一個非常明確的解釋。 – 2014-09-30 15:50:57