80 votes

Python : obtenez la date et l'heure pour "il y a 3 ans aujourd'hui"

En Python, comment obtenir un objet datetime pour « il y a 3 ans aujourd'hui » ?

MISE À JOUR : FWIW, je ne me soucie pas énormément de la précision... c'est-à-dire que nous sommes le 29 février aujourd'hui, je me fiche de savoir si on me donne le 28 février ou le 1er mars dans ma réponse. La concision est plus importante que la configurabilité, dans ce cas.

171voto

Vince Spicer Points 779

Si vous avez besoin d'être exact, utilisez le module dateutil pour calculer les dates relatives

 from datetime import datetime
from dateutil.relativedelta import relativedelta

three_yrs_ago = datetime.now() - relativedelta(years=3)

114voto

Fábio Diniz Points 4110
import datetime
datetime.datetime.now() - datetime.timedelta(days=3*365)

30voto

Glenn Maynard Points 24451

Soustraire 365*3 jours est faux, bien sûr, vous traversez une année bissextile plus de la moitié du temps.

 dt = datetime.now()
dt = dt.replace(year=dt.year-3)
# datetime.datetime(2008, 3, 1, 13, 2, 36, 274276)

ED : Pour résoudre le problème de l'année bissextile,

 def subtract_years(dt, years):
    try:
        dt = dt.replace(year=dt.year-years)
    except ValueError:
        dt = dt.replace(year=dt.year-years, day=dt.day-1)
    return dt

4voto

Mark Ransom Points 132545
def add_years(dt, years):
    try:
        result = datetime.datetime(dt.year + years, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond, dt.tzinfo)
    except ValueError:
        result = datetime.datetime(dt.year + years, dt.month, dt.day - 1, dt.hour, dt.minute, dt.second, dt.microsecond, dt.tzinfo)
    return result

>>> add_years(datetime.datetime.now(), -3)
datetime.datetime(2008, 3, 1, 12, 2, 35, 22000)
>>> add_years(datetime.datetime(2008, 2, 29), -3)
datetime.datetime(2005, 2, 28, 0, 0)

-1voto

unutbu Points 222216
In [3]: import datetime as dt

In [4]: today=dt.date.today()

In [5]: three_years_ago=today-dt.timedelta(days=3*365)

In [6]: three_years_ago
Out[6]: datetime.date(2008, 3, 1)

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