Es ist kein Problem bei der Wettbewerbsprogrammierung, da es von der Bibliothek abhängt, aber es ist ein Memo.
dd = relativedelta(end, begin)
delta_years = dd.years
delta_months = dd.months
Es scheint in Ordnung zu sein.
01.01.2000
01.01.2016
Von der Eingabe
16 years, total 5844 days
Ich möchte die Ausgabe erhalten. Erstens ist es für Tage sehr einfach, subtrahieren Sie einfach datetime.datetime. Obwohl das durch Subtrahieren von Datum und Uhrzeit erhaltene Zeitdelta Tage hat, hat es keinen Monat. Darüber hinaus kann dateimte selbst Tage hinzufügen, jedoch nicht monatlich addieren oder subtrahieren.
Die monatliche Addition und Subtraktion kann mit "dateutil.relativedelta" durchgeführt werden. Da dieses Ergebnis in datetime gespeichert wird, kann es beispielsweise wie folgt implementiert werden.
import sys
import math
from dateutil.relativedelta import relativedelta
#E / A-Verarbeitung und Datum / Uhrzeit
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)
#Delta-Tage sind leicht zu bekommen
dt = e - b
resd = dt.days
#Verwenden Sie relativedelta, um die "Monatsdifferenz" zu erhalten.
deltamonth = 0
while True:
b = b + relativedelta(months=1)
if b <= e:
deltamonth += 1
continue
break
#Das Jahr ist immer Dezember, also teilen Sie es in Monate und Jahre.
resy = deltamonth // 12
resm = deltamonth % 12
#Dies ist der Prozess der Unterscheidung zwischen Plural und Singular vom Problem
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