2010-08-15 5 views
0

J'ai la méthode:Un moyen plus approprié de réécrire cela?

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) 

Ce retourne juste le premier du mois il y a 2 mois, ce qui est ce que je veux est-il une meilleure approche que je aurais pu utiliser à l'aide timedeltas? Je choisis mon chemin parce que les semaines dans un mois ne sont pas toujours constantes.
Merci à l'avance,
Dean

+1

'autre if' devrait être' elif'. – delnan

+0

Qu'est-ce qu'un nom de fonction positivement étrange donné sa fonctionnalité - pourquoi ne pas le nommer "deux mois avant" dans quel que soit votre style de capitalisation préféré et souligne? –

+0

Oui, je sais cependant que je suis habituellement la seule personne à développer un projet et à tout commenter. Donc ce n'est pas un problème. Et au moment d'écrire et d'y penser, c'était la première chose que j'écrivais, le contenu était plus important car je ne pouvais pas l'écrire sur papier. – Dean

Répondre

1

dateutil est une chose étonnante. Il devrait vraiment devenir stdlib un jour.

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

Convertir en un "nombre de mois absolu", soustraire 2, reconvertir à l'année & mois:

currentdate = date.today() 
monthindex = 12*currentdate.year + (currentdate.month-1) -2 
return datetime(monthindex // 12, monthindex % 12 + 1, 1) 
Questions connexes