Wir haben beim Datum Jahre, Monate und Tage. Wenn wir es in diesen Einheiten (JJJJMMTT) haben und verarbeiten, dan haben wir innerhalb einer Zahl zwei Umbrüche der Einheiten. Das bedeutet bei den Tagen ist der Umbruch zum Monat ein Wert zwischen 28 und 31. Dieses ist dann vom Monat abhängig, dazu kommt, dass im Februar noch das Schaltjahr beachtet werden muss. Dazu kommt dann der zweite Umbruch von Monat aufs Jahr. Dieser ist relativ einfach, da nach dem Monat 12 immer der Monat 1 des Folgejahres folgt.
Einen Dezimalen Umbruch in jeder Ziffer wäre das Beste. Dann sind wir aber wieder bei Tagen, die wir ab irgendwo zählen. Damit wir alle Daten darstellen können, die sich auf Datum beziehen wäre es gut, wenn wir uns auf das julianische Datumsformat besinnen. Also die Jahreszahl und der Industrietag (JJJJIII). Der Industrietag ist der Tag im Jahr gezählt ab 1. Januar. Also der 01.01.2020 entspricht dann 2020001 (einer ganzen Zahl), der 01.02.2020 entspricht dann 2020032 (also dem 32 Tag im Jahr). Damit können wir jedes Datum eindeutig und lesbar darstellen. Als Umbruch haben wir nur den Jahresumbruch bei 365/366 bzw. 1.
Die Werte die dann vor Christus sind können wir einfach als negativen Wert darstellen. Die Negation bezeiht sich dann nur auf die Jahreszahl. Demnach ist -5032 der 1. Februar 5 vor Christus. Klar ist, dass wir zu unterschiedlichen Zeitepochen auch unterschiedliche Kalender hatten. Es macht aber Sinn, dieses nach unserem heutigen Kalenderverständnis einheitlich zu verwalten. In der Regel wird man bis auf ganz geringe Ausnahmen im positiven Bereich bleiben. Diesen wollen wir auch noch weiter betrachten.
Noch eine Festlegung, damit es mit der Zeit später auch funktioniert. Das Datum hat immer die Uhrzeit 00:00 Uhr. Dieses auch dann wenn wir es getrennt verwenden.
Der große Vorteil hierbei ist dass man im selben Format einfach damit addieren und subtrahieren kann. Also wenn ich zum Beispiel zu einem Datum (2020032) einfach 40 Tage dazu zählen möchte rechne ich einfach 2020032 + 40 = 2020072 (dieses ist der 12.03.2020). Hier muss ich nur den Umbuch zum nächsten Jahr betrachten und ggf. korrigieren. Gehen wir er und zeihen die 40 Tage ab, rechnen wir 2020032 - 40 = 2019992 (die letzten 3 Stellen sind größer 365, also modifizieren. 2019992 + 365 - 1000 = 2019357 (dieses ist der 24.12.2019).
Noch ein Beispiel mit dem Umbruch bei der Addition über den Jahreswechsel. Wir haben den 01.12.2020 (2020336) und addieren hier wieder unser 40 Tage (2020336 + 40 = 2020376(die letzten 3 Stellen sind größer 366 (2020 ist ein Schaltjahr), also modifizieren. 2020376 + 1000 - 366 = 2021010 (diese ist der 10.01.2021)
Dieses funktioniert nicht nur mit Tagen sonden auch Jahr und Tagen. Also wenn ich zu unserm 01.02.2020 - 2020032 einfach zwei Jahre und 40 Tage addieren möchte errechne ich unseren Additionswert (2 Jahre * 1000 = 2000 dazu kommen dann noch die Tage, enspricht damit 2040). Rechnen wir 2020032 + 2040 = 2022072 (dieses ist der 12.03.2022).
Wir können auch 1 Jahr und 340 Tage zum 01.02.2020 (2020032) addieren. Additionswert 1 Jahr * 1000 = 1000 zuzüglich 340 Tage = 1340. Rechnen wir 2020032 + 1340 = 2021372 ( die letzten 3 Stellen sind größer als 365, also modifizieren. 2021372 + 1000 - 365 = 2022007 (dieses ist der 07.01.2022).
Berechnen können wir damit auch eine Differenz zwischen weit Daten. Also zum Beispiel das Alter. Geburtstag ist 1955259 und als heute nehmen wir 2020063 an. Wir rechnen 2020063 - 1955259 = 64804 (modifizieren 64804 - 1000 + 365 (Jahreswert es letzten Jahres) = 64169). Das Alter ist damit 64 Jahre und 169 Tage.
Noch ein Gedanke zu diesem Format. Wir haben ein Ende eines Zeitraumes wie ein Vertragsende zum 31.01.2020, dann endet der Vertrag um 24:00 Uhr. Diese Uhrzeit gibt es in Wirklichkeit nicht, es ist 00:00 Uhr des nächsten Tages. Und so wird ein solches Datum in diesem Datumsformat auch gespeichert. Hier also der 01.02.2020 00:00 Uhr. Logisch oder?
Damit man später mit einem Datum arbeiten kann ist der Wert < 1000 kein Datum, sondern höchstens ein Rechenwert. Auf der anderen Seite ist ein offenes Datum (gültig-für-immer) der Wert 4999365 (31.12.4999). Dieses wird so gewählt, da größere Daten vonden meisten Datumsprüfungen abgewiesen werden. Es ist damit in dem System der maximale Wert.
Dieses Datumsformat werde ich in meinen Beispielen verwenden und natürlich bauen wir auch die entsprechenden Funktionalitäten dazu. Ich drücke dieses so aus, da ich nicht immer genau nach den Schulungsmethoden vorgehe.