[PYTHON] Berechnung der Anzahl der verstrichenen Jahre und der Anzahl der verstrichenen Monate einschließlich des Nebenjahres

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.

Lösung 1:

Lösung 2

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

Berechnung der Anzahl der verstrichenen Jahre und der Anzahl der verstrichenen Monate einschließlich des Nebenjahres
[Python] Berechnung der Differenz von Datum und Zeit in Monaten und Jahren
Berechnung der selbst erstellten Klasse und der vorhandenen Klasse
Umgang mit "Jahren und Monaten" in Python
Berechnung der technischen Indikatoren durch TA-Lib und Pandas
Vorbereitet für die Datumsberechnung und Automatisierung meines Bots
Berechnung der Standardabweichung und des Korrelationskoeffizienten in Python
[Python] Arten statistischer Werte (Features) und Berechnungsmethoden