Предыдущий день недели в Python
В Python, учитывая дату, как я могу найти предыдущий день недели? (Будни с понедельника по пятницу. Мне плевать на праздники)
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воскресенья. Отсюда легко найти предыдущий будний день.