Есть ли эквивалент для dateutil relativedelta (день недели = FR), но для МЕСЯЦЕВ?

Я хотел бы проанализировать даты в скрипте, и мне было интересно, есть ли эквивалент:

relativedelta(days=1, weekday=MO)

а на месяцы?

Сейчас я извлекаю номер месяца из своего текста и сравниваю его с датой создания документа (и месяцем). Однако это довольно долго и повторяется (и я должен сделать это для будущих, настоящих и прошедших времен)...


person Basile    schedule 23.04.2017    source источник


Ответы (3)


Добавление relativedelta(month=2) к объекту datetime даст вам ту же дату и время, за исключением февраля. Если это создает несуществующую дату, дата будет усечена до последней существующей даты, например:

from datetime import datetime
from dateutil.relativedelta import relativedelta

print(datetime(2015, 3, 30) + relativedelta(month=2))   # 2015-02-28 00:00:00

Как поясняется в документации по относительной дельте:

год, месяц, день, час, минута, секунда, микросекунда:

Абсолютная информация (аргумент в единственном числе); добавление или вычитание относительной дельты с абсолютной информацией не выполняет арифметическую операцию, а скорее ЗАМЕНЯЕТ соответствующее значение в исходной дате и времени значением (ями) в относительной дельте.

Все «единственные» аргументы обрабатываются как «установить этот компонент объекта, к которому я прибавляюсь/из которого я вычитаюсь, к этому значению», тогда как множественные версии тех же аргументов говорят: «Добавить/вычесть это число к/из этого компонента ".

Обратите внимание, что в документации относительной дельты также указан порядок применения каждого компонента, но достаточно сказать, что абсолютные значения применяются перед относительными значениями, поэтому relativedelta(month=3, months=2) установит месяц на март, а затем добавит 2 месяца ( так что, в основном, это эквивалентно relativedelta(month=5)).

person Paul    schedule 23.04.2017

Эквивалентом weekday = MO (или weekday = calendar.MONDAY) может быть month = 1 для января, month = 2 для февраля и так далее.

person frederick99    schedule 23.04.2017

Эти операции наиболее изящно обрабатываются библиотекой Python arrow. Объекты Datetime можно преобразовать в объекты Arrow и наоборот, если вам нужно продолжать использовать datetime, т.е. для совместимости с другими модулями.

person Chris Johnson    schedule 23.04.2017