Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 20, 2007 13:41:11

Sodrian
От:
Зарегистрирован: 2007-07-12
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Timedelta и month.

Всем доброго дня!

Скажите, как можно преодолеть отсутствие у deltatime аргумента month.
Нужно вычислять две даты, месяц назад и два месяца назад, а конструкци типа timedelta(month=1) не работает.



Офлайн

#2 Сен. 20, 2007 13:53:45

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Timedelta и month.

а сколько в месяце дней? ;-)



Офлайн

#3 Сен. 20, 2007 14:00:52

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Timedelta и month.

это знает calendar



Офлайн

#4 Сен. 20, 2007 14:14:15

Sodrian
От:
Зарегистрирован: 2007-07-12
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Timedelta и month.

bialix
а сколько в месяце дней? ;-)
От 28 до 31, а мне нужно точно, если сегодня 20 сентября, то месяц назад будет ровно 20 августа и т.п.

j2a
это знает calendar
Может будут еще предложения?



Офлайн

#5 Сен. 20, 2007 14:51:16

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Timedelta и month.

Sodrian
От 28 до 31, а мне нужно точно, если сегодня 20 сентября, то месяц назад будет ровно 20 августа и т.п.
НУ так и отматывай месяца. month - 1, month - 2. не забывай конечно о смене года.



Офлайн

#6 Сен. 20, 2007 15:03:16

Sodrian
От:
Зарегистрирован: 2007-07-12
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Timedelta и month.

Daevaorn
НУ так и отматывай месяца. month - 1, month - 2. не забывай конечно о смене года.
Это было одно из первых, что пришло в голову, но меня смутила некая костыльность этого метода, я думал, что должно быть в python'е что-нибудь элегантнее.



Офлайн

#7 Сен. 20, 2007 16:01:55

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Timedelta и month.

Sodrian
Это было одно из первых, что пришло в голову, но меня смутила некая костыльность этого метода, я думал, что должно быть в python'е что-нибудь элегантнее.
“костыльности” в этом самая малость. кстати это может быть одна из причина по кторой в timedelta всё кончается на week…



Офлайн

#8 Сен. 20, 2007 16:48:55

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Timedelta и month.


>>> 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)



Офлайн

#9 Сен. 20, 2007 19:08:00

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Timedelta и month.

ммм, что-то мне подсказывает что месяц это не 4 недели.



Офлайн

#10 Сен. 20, 2007 19:42:00

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Timedelta и month.

Это не важно. Важно, что не меньше. Не понятно, правда, что делать с 31-30-28 числами. Т.е., спросив “месяц назад от 31.03.2007”, не понятно, корректно ли получать 28.02.2007. Если да, то модуль calendar подскажет, сколько дней в интересующем месяце, так что доработать мой код – не проблема. Тем более, это не готовый рецепт, а набросок, направление.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version