Calcul du nombre d'années écoulées et du nombre de mois écoulés y compris hors-année

Ce n'est pas un problème dans la programmation compétitive car cela dépend de la bibliothèque, mais c'est une note.

--Supplément (2020/1/13)

dd = relativedelta(end, begin)
delta_years =  dd.years
delta_months = dd.months

Cela semble aller.

--Ce qui suit est l'article précédent

01.01.2000
01.01.2016
De l'entrée
16 years, total 5844 days

Je veux obtenir la sortie. Tout d'abord, c'est très facile pendant des jours, il suffit de soustraire datetime.datetime. Cependant, bien que le delta temporel obtenu en soustrayant datetime ait des jours, il n'a pas de mois. De plus, dateimte lui-même peut ajouter des jours, mais ne peut pas ajouter ou soustraire sur une base mensuelle.

Solution 1:

Solution 2

L'addition et la soustraction mensuelles peuvent être effectuées en utilisant dateutil.relativedelta. Puisque ce résultat est enregistré dans datetime, il peut être implémenté comme suit, par exemple.

import sys
import math
from dateutil.relativedelta import relativedelta

#Traitement des E / S et datetime
import datetime
begin = input()
end = input()
bd, bm, by = map(int, begin.split("."))
b = datetime.datetime(year=by, month=bm, day=bd)
ed, em, ey = map(int, end.split("."))
e = datetime.datetime(year=ey, month=em, day=ed)

#les jours delta sont faciles à obtenir
dt = e - b
resd = dt.days

#Utilisez relativedelta pour obtenir la «différence mensuelle»
deltamonth = 0
while True:
    b = b + relativedelta(months=1)
    if b <= e:
        deltamonth += 1
        continue
    break

#L'année est toujours décembre, alors divisez-la en mois et en années.
resy = deltamonth // 12
resm = deltamonth % 12


#C'est le processus de distinction entre le pluriel et le singulier du problème
res = ""
if resy > 0:
    if resy == 1:
        res += "1 year, "
    else:
        res += "{0} years, ".format(resy)

if resm > 0:
    if resm == 1:
        res += "1 month, "
    else:
        res += "{0} months, ".format(resm)

if resd == 1 or resd == 0:
    res += "total {0} days".format(resd)
else:
    res += "total {0} days".format(resd)

print(res)

Recommended Posts

Calcul du nombre d'années écoulées et du nombre de mois écoulés y compris hors-année
[python] Calcul des mois et des années de différence de date / heure
Calcul de la classe auto-fabriquée et de la classe existante
Gérer les "années et mois" en Python
Calcul des indicateurs techniques par TA-Lib et pandas
Préparé pour le calcul de la date et l'automatisation de mon bot
Calcul de l'écart type et du coefficient de corrélation en Python
[Python] Types de valeurs statistiques (caractéristiques) et méthodes de calcul