0
votes

Comment soustraire des dates dans le module DateTime Python pour obtenir l'âge dans un an, un mois, un jour, un format

Je veux que ce programme obtienne l'âge d'une personne. Je veux que cela fasse cela en soustrayant l'anniversaire d'une personne de la date actuelle. Il obtient le mois et la journée à droite mais l'année n'est pas exactement correcte. Par exemple, lorsque j'entre cette date, il dira que la personne a 16 ans. En réalité, ils devraient avoir 15 ans puisque leur 16e anniversaire n'est pas encore arrivé. Comment puis-je résoudre ce problème? XXX


1 commentaires

Si le mois et le jour sont non négatifs, alors l'anniversaire de l'événement n'a pas encore eu lieu. Vous pouvez utiliser cela pour corriger l'année.


4 Réponses :


1
votes

J'ai un meilleur moyen de représenter cette alternative de code
from datetime import date 
def calculateAge(birthDate): 
       today = date.today()
       age = today.year - birthDate.year - ((today.month, today.day) <  (birthDate.month, birthDate.day)) 
       return age
print(calculateAge(date(1997, 1, 8)), "years") 


0 commentaires

1
votes

Vous pouvez faire quelque chose comme ça. XXX


0 commentaires

0
votes

Lorsque vous ajoutez 12 au mois, vous devez soustraire 1 de l'année pour compenser depuis 1 an à 12 mois. Vous devriez faire quelque chose de similaire pour la journée aussi.

if month_answer < 1:
    month_answer += 12
    year_answer -= 1


0 commentaires

1
votes

Vous avez le même problème avec le mois si le jour actuel est inférieur à l'anniversaire. Dans ces cas, il vous suffit de corriger la prochaine unité supérieure. Vous êtes presque arrivé avec la déclaration IF. Maintenant, vous venez d'ajuster l'année et le mois. XXX

Une question, cependant. Si le mois en cours a 31 jours, vous devriez ajouter 31 à la journée. Si cela n'a que 30 ou 28 jours, vous devez ajouter 30 ou 28. Y a-t-il un moyen facile d'obtenir le nombre correct de DateTime?


1 commentaires

Le moyen d'obtenir le nombre de jours dans un mois est de créer un datetime pour le premier mois suivant mois suivant, puis soustraire un timedelta de Un jour.