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.
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