2010-08-15 2 views
0

У меня есть метод:Более подходящий способ переписать это?

def checkAgainstDate(): 
    currentDate = date.today() 
    currentMonth = date.today().month 
    if currentMonth == 1 
     year = currentDate.year-1 
     return date(year, 11, 01) 
    elif currentMonth == 2: 
     year = currentDate.year-1 
     return date(year, 12, 01) 
    else 
     return date(currentDate.year, currentMonth-2, 01) 

Это просто возвращает первый месяц 2 месяца назад, что это то, что я хочу есть лучший подход я мог бы использовать с помощью timedeltas? Я выбираю свой путь, потому что недели в месяц не всегда постоянны.
Спасибо заранее,
Дин

+1

'еще if' должен быть' elif'. – delnan

+0

Какое положительное имя функции задает ее функциональность - почему бы не назвать ее «двумя месяцами раньше» в любом своем любимом стиле капитализации и подчеркивания? –

+0

Да, я знаю, однако, я, как правило, единственный человек, который разрабатывает проект и комментирует все. Так что это не проблема. И в момент написания и размышления об этом, это было первое, что я написал, содержание было более важным, поскольку я не мог написать его на бумаге. – Dean

ответ

1

dateutil удивительная вещь. Это действительно должно стать stdlib когда-нибудь.

>>> from dateutil.relativedelta import relativedelta 
>>> from datetime import datetime 
>>> (datetime.now() - relativedelta(months=2)).replace(day=1) 
datetime.datetime(2010, 6, 1, 13, 16, 29, 643077) 
>>> (datetime(2010, 4, 30) - relativedelta(months=2)).replace(day=1) 
datetime.datetime(2010, 2, 1, 0, 0) 
>>> (datetime(2010, 2, 28) - relativedelta(months=2)).replace(day=1) 
datetime.datetime(2009, 12, 1, 0, 0) 
0

Преобразование к "абсолютному номеру месяца", вычтите 2, конвертировать обратно в год & месяц:

currentdate = date.today() 
monthindex = 12*currentdate.year + (currentdate.month-1) -2 
return datetime(monthindex // 12, monthindex % 12 + 1, 1) 
Смежные вопросы