97 votes

Différence pythonique entre deux dates en années ?

Existe-t-il un moyen plus efficace de le faire ci-dessous ? Je veux avoir la différence en années entre deux dates sous la forme d'un seul scalaire. Toutes les suggestions sont les bienvenues.

 from datetime import datetime
start_date = datetime(2010,4,28,12,33)
end_date = datetime(2010,5,5,23,14)
difference  = end_date - start_date
difference_in_years = (difference.days + difference.seconds/86400)/365.2425

142voto

Karl Bartel Points 826

Si vous voulez des résultats précis, je vous recommande d'utiliser la bibliothèque dateutil.

 from dateutil.relativedelta import relativedelta
difference_in_years = relativedelta(end_date, start_date).years

Ceci est pour des années complètes (par exemple l'âge d'une personne). Si vous voulez des années fractionnaires, ajoutez des mois, des jours, des heures, ... jusqu'à la précision souhaitée.

30voto

Kostyantyn Points 661

J'utilise l'un d'entre eux pour calculer l'âge de la personne :

 import datetime
dob = datetime.date(1980, 10, 10)

def age():
    today = datetime.date.today()
    years = today.year - dob.year
    if today.month < dob.month or (today.month == dob.month and today.day < dob.day):
        years -= 1
    return years

def age2():
    today = datetime.date.today()
    this_year_birthday = datetime.date(today.year, dob.month, dob.day)
    if this_year_birthday < today:
        years = today.year - dob.year
    else:
        years = today.year - dob.year - 1
    return years

18voto

Michel Fernandes Points 149

Faites juste ceci :

 from dateutil.relativedelta import relativedelta

myBirthday = datetime.datetime(1983,5,20,0,0,0,0)
now = datetime.datetime.now()



difference = relativedelta(now, myBirthday)
print("My years: "+str(difference.years))

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