2015-07-29 1 views
3

J'ai vu quelques méthodes utilisant le module dateutil pour ce faire, mais y a-t-il un moyen de le faire sans utiliser les bibliothèques intégrées?Trouver le mois précédent

Par exemple, le mois en cours est juillet. Je peux le faire en utilisant la fonction datetime.now().

Quel serait le moyen le plus facile pour python de revenir le mois précédent?

+1

Pourquoi la restriction sur l'utilisation des bibliothèques, et pourquoi le module 'datetime' en est-il exempté? –

+2

@ Two-BitAlchemist Il n'est pas rare de faire une exception pour les bibliothèques incluses dans la langue, c'est-à-dire qui n'ont pas besoin d'être installées. –

+0

@MarkRansom C'est une bonne idée. Je voudrais que le PO mette à jour leur question avec leur raison. –

Répondre

8

Il est très facile:

>>> previous_month = datetime.now().month - 1 
>>> if previous_month == 0: 
...  previous_month = 12 
+2

Vous pouvez le doubler avec 'month_month = datetime.now(). Month - 1 ou 12'. – TigerhawkT3

+5

Je pense qu'en utilisant '(datetime.now(). Mois - 1)% 12' est peut-être un peu plus propre car cela fonctionne si vous soustrayez (ou ajoutez) des nombres différents au lieu de 1. Il exprime aussi l'intention plus clairement est un cas d'école d'arithmétique modulaire. Ceci est tout à fait subjectif cependant .... – or1426

+0

Un doublure est le golf de code. Code golf est impythonique. Code devrait avoir une intention claire et facilement compréhensible, surtout lorsqu'il est écrit pour les débutants. ;-) –

-2

Si vous voulez un objet Date:

import datetime 
d = datetime.date.today() - datetime.timedelta(days=30) 
>>> datetime.date(2015, 6, 29) 
+2

Cela ne fonctionne pas par ex. 31 juillet. –

+0

@MarkRansom Vous avez raison, il a besoin d'une certaine adaptation. Par ailleurs, la durée _month_ peut avoir des significations différentes ;-) – JoshRomRock

+0

La question demande le mois précédent, cependant, plutôt que pour la date il y a un mois. – TigerhawkT3

1

Vous pouvez utiliser le module calendar

>>> from calendar import month_name, month_abbr 
>>> d = datetime.now() 
>>> month_name[d.month - 1] or month_name[-1] 
'June' 
>>> month_abbr[d.month - 1] or month_abbr[-1] 
'Jun' 
>>> 
+0

Ne fonctionne pas si le mois en cours est janvier. –

+1

@LennartRegebro a édité ma réponse Merci. – styvane