Найти дату понедельника с Python
34412 просмотра
8 ответа
Как мне найти дату предыдущего понедельника, основанную на текущей дате, используя Python? Я думал, может быть, я мог бы использовать: datetime.weekday()
сделать это, но я застреваю.
Я в принципе хочу найти сегодняшнюю дату и дату понедельников построить запрос диапазона дат в Джанго с помощью: created__range=(start_date, end_date)
.
Ответы (8)
144 плюса
>>> import datetime
>>> today = datetime.date.today()
>>> today + datetime.timedelta(days=-today.weekday(), weeks=1)
datetime.date(2009, 10, 26)
Несколько слов объяснения:
Возьми сегодняшнюю дату. Вычтите количество дней, которые уже прошли на этой неделе (это даст вам «последний» понедельник). Добавьте одну неделю.
Изменить : выше для «следующего понедельника», но так как вы искали «последний понедельник», вы можете использовать
today - datetime.timedelta(days=today.weekday())
Автор: ChristopheD
Размещён: 25.10.2009 09:02
39 плюса
Пост ChristopheD близок к тому, что вы хотите. У меня недостаточно репутации, чтобы комментировать :(
Вместо (что фактически дает вам следующий предстоящий понедельник):
>>> сегодня + datetime.timedelta (days = -today.weekday (), недель = 1) datetime.date (2009, 10, 26)
Я бы сказал:
>>> last_monday = today - datetime.timedelta (days = today.weekday ())
Если вы хотите предыдущую неделю, добавьте параметр 'days = 1'.
Это делает код более читабельным, поскольку вы вычитаете временную дельту. Это устраняет любую путаницу, вызванную добавлением временной дельты с отрицательными и положительными смещениями.
Автор: Steven Graham Размещён: 25.10.2009 10:1220 плюса
Я думаю, что самый простой способ - использовать python-dateutil так:
from datetime import date
from dateutil.relativedelta import relativedelta, MO
today = date.today()
last_monday = today + relativedelta(weekday=MO(-1))
print last_monday
Автор: diegueus9
Размещён: 16.02.2012 07:13
8 плюса
Примечание: ОП говорит в комментариях: « Я искал прошедший понедельник ». Я полагаю, это означает, что мы ищем последний понедельник, который произошел строго до сегодняшнего дня.
Вычисление немного сложно сделать правильно, используя только 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
.
1 плюс
Использование timedeltas и модуля datetime:
import datetime
datetime.date.today()+datetime.timedelta(days=-datetime.date.today().weekday())
Автор: elzapp
Размещён: 25.10.2009 09:06
1 плюс
Вы можете использовать Нетти . Я попробовал parsedatetime и dateparser . Сравнивая эти три, я думаю, что Natty является лучшим.
Чтобы получить свой результат, используйте как это:
>>> from natty import DateParser
>>> dp = DateParser('last monday')
>>> dp.result()
[datetime.datetime(2016, 8, 1, 17, 35, 5, tzinfo=tzlocal())] #Today is 9th of August 2016 5.35 PM
Ссылка на Github: https://github.com/eadmundo/python-natty
Попробуйте, это может сделать больше!
Автор: AnsarAdimu Размещён: 09.08.2016 12:081 плюс
Для будущих гуглеров, которые появляются на этой странице в поисках способа получить «самое последнее воскресенье», а не «самый последний понедельник», вам нужно сделать дополнительную математику, потому что datetime.weekday () рассматривает понедельник как первый день недели:
today = datetime.date.today()
weekday = today.weekday() + 1
start_day = today - datetime.timedelta(days=weekday % 7)
Если сегодня вторник, то это start_day
в прошлое воскресенье. Если сегодня воскресенье, это наборы start_day
на сегодняшний день . Уберите, % 7
если хотите, чтобы «последнее воскресенье» было неделю назад, если сейчас воскресенье.
0 плюса
d = datetime.datetime.today().weekday()
дает вам сегодняшний день недели, считая от 0 (понедельник) до 6 (воскресенье)
datetime.datetime.today() + datetime.timedelta(days=(7-d)%7)
(7-d)% 7 дает вам дни до понедельника или оставляет вас там, где вы есть, если сегодня понедельник
Автор: foosion Размещён: 25.10.2009 09:07Вопросы из категории :
- python Обработка XML в Python
- python Как я могу использовать Python itertools.groupby ()?
- python Python: На какой ОС я работаю?
- python Как я могу создать непосредственно исполняемое кроссплатформенное приложение с графическим интерфейсом на Python?
- python Вызов функции модуля с использованием его имени (строки)
- python Звук Питона («Колокол»)
- python Regex и unicode
- python Создать зашифрованный ZIP-файл в Python
- python Создайте базовый итератор Python
- python Функция транспонирования / распаковки (обратная сторона zip)?
- django Использование виджетов времени / даты в Django в произвольной форме
- django Django + FCGID на Fedora Core 9 - что мне не хватает?
- django Грязные поля в джанго
- django Есть ли простой способ заполнить SlugField из CharField?
- django Захват параметров URL в запросе. GET
- django Модель limit_choices_to = {'user': user}
- django В интерфейсе администратора Django есть способ дублировать элемент?
- django Ввести ошибки в уже утвержденную форму?
- django How do I perform HTML decoding/encoding using Python/Django?
- django Шаблонные переменные Django и Javascript