Примечание: ОП говорит в комментариях: " Я искал прошедший понедельник ". Я полагаю, это означает, что мы ищем последний понедельник, который произошел строго до сегодняшнего дня.
Вычисление немного сложно сделать правильно, используя только модуль datetime
(особенно с учетом приведенной выше интерпретации «прошедшего понедельника» и если вы хотите избежать неуклюжих if-statements
). Например, если today
- это понедельник, например 2013-12-23
,
today - DT.timedelta(days=today.weekday())
возвращает 2013-12-23
, то есть в тот же день, что и today
(не прошедший понедельник).
Преимущество использования модуля dateutil заключается в том, что вам не нужно делать сложные умственные вычисления или заставлять читателя делать то же самое, чтобы получить правильную дату. dateutil
все делает за вас:
import dateutil.relativedelta as rdelta
import datetime as DT
today = DT.date(2013, 12, 23) # Monday
past_monday = today + rdelta.relativedelta(days=-1, weekday=rdelta.MO(-1))
print(past_monday)
# 2013-12-16
next_monday = today + rdelta.relativedelta(days=1, weekday=rdelta.MO(+1))
print(next_monday)
# 2013-12-30
Обратите внимание, что days=-1
необходим для гарантии того, что past_monday
- это день, отличный от today
.