Предыдущий день недели в Python


В Python, учитывая дату, как я могу найти предыдущий день недели? (Будни с понедельника по пятницу. Мне плевать на праздники)

3 12

3 ответа:

Просто вычтите день из заданной даты, а затем проверьте, является ли эта дата будним днем. Если нет, вычтите еще один, пока у вас не будет будний день:

from datetime import date, timedelta
def prev_weekday(adate):
    adate -= timedelta(days=1)
    while adate.weekday() > 4: # Mon-Fri are 0-4
        adate -= timedelta(days=1)
    return adate

Демо:

>>> prev_weekday(date.today())
datetime.date(2012, 8, 20)
>>> prev_weekday(date(2012, 8, 20))
datetime.date(2012, 8, 17)

В качестве альтернативы, используйте таблицу смещения; нет необходимости делать это сопоставление, Кортеж будет делать просто отлично:

_offsets = (3, 1, 1, 1, 1, 1, 2)
def prev_weekday(adate):
    return adate - timedelta(days=_offsets[adate.weekday()])

В модуле datetime можно сделать примерно следующее: a = date.today() - timedelta(days=1) а потом a.weekday(). Где понедельник-0, а воскресенье-6.

См типа datetime модуль, в частности date() и weekday() функции. Например:

import datetime

temp = datetime.date(2012,8,21) # Today's date: 2012/08/21
print temp.weekday()

Это выведет 1. 0 означает понедельник, 1 - вторник и т. д., до 6 воскресенья. Отсюда легко найти предыдущий будний день.