2014-09-30 2 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

Определите «не работает» лучше. –

ответ

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) 

Обратите внимание, что isoweekday является 1 (понедельник) в 7 (воскресенье), в то время как weekday является 0 к 6.


Кроме того, обратите внимание, что ваша логика в настоящее время добавляет один день в субботу и два дня в воскресенье, что не правильно - я думаю, что вы хотите:

>>> 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, спасибо !, это очень четкое объяснение. –

Смежные вопросы