2010-08-15 68 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 2010-08-15 20:15:10

+0

考慮到它的功能,這是一個非常奇怪的函數名稱 - 爲什麼不在「兩個月前」以任何您喜歡的大小寫形式和下劃線命名? – 2010-08-15 20:24:12

+0

是的,我知道但是我通常是唯一一個在項目上發展和評論一切的人。所以這不是問題。在寫作和思考時,這是我寫的第一件事,內容更重要,因爲我不能寫在紙上。 – Dean 2010-08-15 20:27:04

回答

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) 
相關問題