590 votes

Comment puis-je calculer la date de six mois à compter de la date actuelle en utilisant le module Python de datetime ?

J’utilise le module Python de datetime. Je cherche à calculer la date de 6 mois à compter de la date actuelle. Quelqu'un pourrait-il me donner un peu d’aide faisant cela ?

La raison pour laquelle que je veux générer une date de 6 mois à la date actuelle est de produire une Date d’examen. Si l’utilisateur entre des données dans le système, qu'il aura une date d’examen de six mois à compter de la date, ils sont entrés dans les données.

1343voto

Mahendra Points 2469

J’ai trouvé cette solution pour être bon. (Cet exemple utilise l’extension python-dateutil, http://labix.org/python-dateutil )

L’avantage de cette approche est qu’elle s’occupe de questions avec 28,30,31 jours etc.. Cela devient très utile dans le traitement des règles d’entreprise et scénarios (dire génération de facture etc..)

73voto

vartec Points 53382

Eh bien, cela dépend de ce que vous entendez par 6 mois à compter de la date actuelle.

1) mois naturels,

2) définition de banquiers, 6 * 30

20voto

user417751 Points 71

Cette solution fonctionne correctement pour le mois de décembre, la plupart des réponses sur cette page n'ont pas. Vous devez d'abord déplacer le mois à partir de la base 1 (ie Jan = 1) à la base 0 (ie Jan = 0) avant d'utiliser le modulo ( % ) ou de la division entière ( // ), autrement novembre (11) plus 1 mois vous donne 12, qui au moment de trouver le reste ( 12 % 12 ) donne 0.

(Et ne pas suggérer "(mois % 12) + 1" ou Oct + 1 = décembre!)

def AddMonths(d,x):
    newmonth = ((( d.month - 1) + x ) % 12 ) + 1
    newyear  = d.year + ((( d.month - 1) + x ) / 12 ) 
    return datetime.date( newyear, newmonth, d.day)

Mais ... ca n'a pas de compte pour le problème comme Jan 31 + un mois. Nous en revenons donc à l'OP - qu'entendez-vous par l'ajout d'un mois? Un soln est de revenir en arrière jusqu'à ce que vous arrivez à un jour de validité, étant donné que la plupart des gens supposent que le dernier jour de janvier, plus d'un mois, est égal au dernier jour de Février. Ce sera le travail sur les nombres négatifs des mois. La preuve:

>>> import datetime
>>> AddMonths(datetime.datetime(2010,8,25),1)
datetime.date(2010, 9, 25)
>>> AddMonths(datetime.datetime(2010,8,25),4)
datetime.date(2010, 12, 25)
>>> AddMonths(datetime.datetime(2010,8,25),5)
datetime.date(2011, 1, 25)
>>> AddMonths(datetime.datetime(2010,8,25),13)
datetime.date(2011, 9, 25)
>>> AddMonths(datetime.datetime(2010,8,25),24)
datetime.date(2012, 8, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-1)
datetime.date(2010, 7, 25)
>>> AddMonths(datetime.datetime(2010,8,25),0)
datetime.date(2010, 8, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-12)
datetime.date(2009, 8, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-8)
datetime.date(2009, 12, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-7)
datetime.date(2010, 1, 25)>>> 

18voto

Johannes Weiß Points 19013

Qu’entendez-vous par « 6 mois ». 2009-02-13 + 6 mois == le 2009-08-13 ou est-il le 2009-02-13 + 6 * 30 jours ?

Plus d’infos sur mx. DateTime

7voto

kmkaplan Points 10338
import datetime
print (datetime.date.today() + datetime.timedelta(6*365/12)).isoformat()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X