Предыдущий день недели в 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
воскресенья. Отсюда легко найти предыдущий будний день.