Форум сайта python.su
Всем доброго дня!
Скажите, как можно преодолеть отсутствие у deltatime аргумента month.
Нужно вычислять две даты, месяц назад и два месяца назад, а конструкци типа timedelta(month=1) не работает.
Офлайн
а сколько в месяце дней? ;-)
Офлайн
это знает calendar
Офлайн
bialixОт 28 до 31, а мне нужно точно, если сегодня 20 сентября, то месяц назад будет ровно 20 августа и т.п.
а сколько в месяце дней? ;-)
j2aМожет будут еще предложения?
это знает calendar
Офлайн
SodrianНУ так и отматывай месяца. month - 1, month - 2. не забывай конечно о смене года.
От 28 до 31, а мне нужно точно, если сегодня 20 сентября, то месяц назад будет ровно 20 августа и т.п.
Офлайн
DaevaornЭто было одно из первых, что пришло в голову, но меня смутила некая костыльность этого метода, я думал, что должно быть в python'е что-нибудь элегантнее.
НУ так и отматывай месяца. month - 1, month - 2. не забывай конечно о смене года.
Офлайн
Sodrian“костыльности” в этом самая малость. кстати это может быть одна из причина по кторой в timedelta всё кончается на week…
Это было одно из первых, что пришло в голову, но меня смутила некая костыльность этого метода, я думал, что должно быть в python'е что-нибудь элегантнее.
Офлайн
>>> def month_ago(date=None):
…: if date is None:
…: date = datetime.date.today()
…: _d = date - datetime.timedelta(weeks=4)
…: return datetime.date(_d.year, _d.month, date.day)
…:
>>> month_ago()
<<< datetime.date(2007, 8, 20)
>>> month_ago(datetime.date(2007, 1, 15))
<<< datetime.date(2006, 12, 15)
Офлайн
ммм, что-то мне подсказывает что месяц это не 4 недели.
Офлайн
Это не важно. Важно, что не меньше. Не понятно, правда, что делать с 31-30-28 числами. Т.е., спросив “месяц назад от 31.03.2007”, не понятно, корректно ли получать 28.02.2007. Если да, то модуль calendar подскажет, сколько дней в интересующем месяце, так что доработать мой код – не проблема. Тем более, это не готовый рецепт, а набросок, направление.
Офлайн