Keine Sorge, wir wollen nichts über die Altersstruktur unserer Leser:innen wissen. Es geht vielmehr um die Toten. In meinem Job habe ich es auch mit Beerdigungen zu tun. Bei einem Bestattungsauftrag der Stadt ist immer das Alter der verstorbenen Person angegeben, und zwar im Format Jahre, Monate, Tage. Ausserdem ist das Geburts- und Sterbedatum vermerkt. Die Altersangabe ist für Pfarrpersonen, die die Bestattung durchführen, von Interesse.
In unserer Kasualienverwaltung möchten wir das Alter nicht ungeprüft vom Bestattungsauftrag übernehmen, sondern selbst berechnen. Ich habe mich dieser Aufgabe angenommen und bin zu erstaunlichen Ergebnissen gekommen. Zuerst einmal habe ich das Alter in einer Tabellenkalkulation berechnet:
Die Formeln dafür sehen in LibreOffice Calc und Excel gleich aus:
- Jahre = DATUMDIF(A2;B2;"Y")
- Monate = DATUMDIF(A2;B2;"YM")
- Tage = DATUMDIF(A2;B2;"MD")
Die beiden Tabellenkalkulationen liefern das gleiche Ergebnis, welches mit der Angabe auf dem Bestattungsauftrag übereinstimmt. So weit, so gut. Nun wollte ich das Alter in Python ausrechnen:
from datetime import date
from dateutil.relativedelta import relativedelta as delta
birth = date(1938, 4, 30)
death = date(2025, 3, 24)
age = delta(death, birth)
print(age.years, 'Jahre', age.months, 'Monate', age.days, 'Tage')
Erklärung: Das Modul datetime wird benötigt, um mit Datenobjekten umgehen zu können. Dateutil.relativedelta wird für die Differenzberechnung von Daten gebraucht. Dann erstelle ich die beiden Datenobjekte für Geburt und Tod. Anschliessend wird das relative Delta in der Variable age bereitgestellt. Die Ausgabe ist selbsterklärend. Das Ergebnis lautet:
86 Jahre 10 Monate 24 Tage
Die Jahre und Monate scheinen kein Problem zu sein, wohl aber die Tage. 22 ist nicht gleich 24.
Dann habe ich drei Webdienste bemüht:
Der https://www.calculator.net/age-calculator.html sagt: 24 Tage
Der https://www.gigacalculator.com/calculators/age-calculator.php sagt: 22 Tage
Der https://www.smart-rechner.de/altersrechner/rechner.php sagt: 23 Tage
Also, was denn nun? 22, 23 oder 24 Tage? Man kann das Alter auch von Hand ausrechnen. Da sich alle bei den Jahren und Monaten einig sind, konzentriere ich mich auf die Tage.
- 1938 plus 86 Jahre ergibt 2024, und zwar im April
- April 2024 plus 10 Monate ergibt Februar 2025
- Von Ende Februar bis zum 24. März sind es 24 Tage
Fazit
Der Bestattungsauftrag, die Tabellenkalkulationen und der Gigacalculator meinen, dass es 22 Tage sind. Mein Python-Skript, die Handrechnung und Calculator.net stimmen für 24 Tage. Als Aussenseiter behauptet der Smart-Rechner, dass es 23 Tage sind. Ja, was denn jetzt?
Das Ganze riecht verdächtig nach dem Plus/Minus-Eins-Problem, mit dem wir es in der Informatik häufig zu tun haben. Dabei geht es darum, ob die Grenzwerte mitgezählt werden oder nicht.
Nun lasse ich euch und mich ratlos zurück. Vielleicht habt ihr eine Idee, wie man das Alter korrekt berechnet.
Titelbild: https://pixabay.com/photos/calendar-pay-number-year-date-2428560/
Quellen: im Text
Witzige Beobachtung!
Ohne das jetzt überprüft zu haben, vermute ich, dass der Grund in der Monatsrechnung liegt.
Die Berechnung der Jahre ist klar, danach kann man die Monate aber unterschiedlich berechnen:
Würde das den Unterschied erklären?
Und dann im 1. Fall: Tage = Tag_Tod – Tag_Geburt und im 2. Fall: Tage = Tage_gesamt % 30
Eine Altersausssage auf Basis von Jahr, Monat und Tag ist GRUNDSÄTZLICH ungenau, weil Jahre und Monate nicht immer die gleiche Anzahl Tage haben. Je nach Jahr und Monat werden unterschiedlich viele Tage in diese Jahre und Maonate gesteckt und der Rest des Lebensalters bleibt dann für die Tage übrig.
Beispiele: Du lebst nur 30 Tage. Im Januar reicht das nicht für einen Monat. Im Februar sind das eine Monat und 2 Tage bzw. 1 Tag im Schaltjahr. oder Du lebst 366 Tage. Das kann genau ein Jahr oder aber ein Jahr und ein Tag sein.
Fazit: Altersangaben sind nur wirklich korrekt, wenn man das Alter in Tagen angibt, und dabei eine Programm verwendet, welches Schaltjahre richtig berücksichtigt.
Gruß Frank
Vom ersten bis zum vierundzwanzigsten März sind es -fraglos-
24 Tage
😘️ - In "Februaren" gibt es aber mitunter 'Schalttage', die jedoch –in Deinem Fall, bzw. in dem des Verblichenen– für die Berechnung der Jahre und Monate nicht ins Gewicht fallen dürften.Gefunden habe ich ferner übrigens einen 'Calendar Converter' in JS, wo neben den Maya Zählungen (und etlichen anderen) auch die
ISO-8601
Erwähnung findet, und offenbar haben wir es beim 24.03.2025 zu tun gehabt mit ......
Day 4 of week 17 of year 2025
(die Formulierung ist nicht der Standard, sondern dem Calculator geschuldet).s.a.: https://www.fourmilab.ch/documents/calendar/
...MEIN Fehler, weil ich idiotischerweise abgerutscht war und es für APRIL anstatt März berechnet hatte. Mit dem Calculator ist also alles in bester Ordnung.
Ich denke, dass die Grenzwerte hier mitzuzählen sind. Denn das Sterbedatum ist ja nicht der erste Tag, der nicht mehr miterlebt wurde, sondern der letzte, der miterlebt wurde (wenn auch nicht komplett). Fall Vollzähligkeit eine Rolle spielt müsste weiter nach Stunden, Minuten, usw aufgedröselt werden. Sonst hätte jemand, der am Tag nach seiner Geburt stirbt nämlich 0 Tage gelebt.
https://www.wolframalpha.com/input?i=days+from+30.04.1938+to+24.03.2025
;-)
Schaltjahre nicht vergessen ;) Alle 100 Jahre ist kein Schaltjahr, alle 400 Jahre aber schon 1800 war kein Schaltjahr, 1900 auch keines, aber 2000 schon
Jahr ist an sich schon eine unsaubere Einheit. Ein Schaltjahr hat 366 Tage. Bei den Monaten ähnlich. Je nachdem, was man unter einem Jahr/Monat versteht, wird man zu unterschiedlichen Ergebnissen kommen.
Beim age-Calculator steht auch ein entsprechender Hinweis dabei:
"In some situations, the months and day result of this age calculator may be confusing, especially when the starting date is the end of a month. For example, we count Feb. 20 to Mar. 20 to be one month. However, there are two ways to calculate the age from Feb. 28, 2022 to Mar. 31, 2022. If we consider Feb. 28 to Mar. 28 to be one month, then the result is one month and 3 days. If we consider both Feb. 28 and Mar. 31 as the end of the month, then the result is one month. Both calculation results are reasonable. Similar situations exist for dates like Apr. 30 to May 31, May 30 to June 30, etc. The confusion comes from the uneven number of days in different months. In our calculations, we use the former method."
Bei der Ausrechnen würde ich eher den angebrochenen Monat bis zum 1. des folgenden Monats mit Tagen auffüllen. Denn was sollte 30.4.+10 Monate bedeuten? Das wäre sonst 30. Februar, da der Februar in einem Nichtschaltjahr 28 Tage hat käme man effektiv beim 2. März heraus und dann sind es bis zum 24. März nur noch 22 Tage.
Also eher so: 30.4. + 1 Tag = 1. Mai ; 1. Mai + 10 Monate = 1. März des folgenden Jahres ; 1. März + 23 Tage = 24. März
Also würde ich bei 86 Jahre, 10 Monate, 23 Tage herauskommen. Jemand der irgendwie mit mittleren Monaten und Jahren rechnet könnte auch ein anderes Ergebnis haben.
Der Tag könnte auch schon durch Rundungsfehler falsch sein. Ist jemand um 18 Uhr geboren und um 6 Uhr in der Frühe gestorben ist es auch schon ein halber Tag weniger .
Ich tippe ebenfalls auf das Problem Schaltjahre. Vielleicht wird es im Ganzen/Mittel genauer, wenn man die durchschnittliche Länge eines Jahres des gregorianischen Kalender anwendet (365,2425 Tage).
Nach deutschem Zivilrecht ist Deine Rechnung zweifelsfrei die richtige (Rechtsgedanke des § 189 II BGB).