Java Datum - Nur echt mit julianischer Tageszahl

Das Java Datum – komplexer als man denkt.

Denn das Datum bei Java ist eines jener scheinbar trivialen Konzepte, die jeder zu verstehen meint, die bei genauer Betrachtung aber ihre Tücken haben. Ein Datum bezieht sich immer auf einen Kalender(z.B. den Java Calender) und unterscheidet sich grundsätzlich von einem Zeitpunkt. Auf der Erde hat jeder Zeitpunkt zwei Daten, abhängig von der Zeitzone für die die Zuordnung erfolgt. Andererseits gilt an einem Ort stets genau ein Datum bezogen auf einen Kalender.

Daten und Fristen spielen besonders in der Wirtschaft eine große Rolle, was man auch daran erkennen kann, dass sich im BGB mehrere Paragrafen mit diesbezüglichen Definitionen befassen. Dabei gilt allgemein, dass Daten für die Berechnung von Fristen oder Dauern an einem festgelegten Ort (oft „Erfüllungsort" genannt) betrachtet werden. Es kann also keine Probleme mit Zeitzonen geben.

 

Der Zeitstempel bei Java ist kein Datum.

Der java.util.Date-Typ ist trotz seines Namens innerhalb von Java kein Datum, sondern ein Zeitstempel und hätte auch so benannt werden sollen. Diese Klasse ist auch in anderer Hinsicht schlecht entworfen worden. Es gab zwar einige Versuche, für wesentliche Mängel Abhilfe zu schaffen, z. B. durch die Java Calendar-Klassen, das grundlegende Problem bei der Implementierung eines Datums wurde aber nicht gelöst.

Im Ergebnis ist jede Form von Datumsberechnung in Java, die auf der Datums-Klasse basiert aufwendig in der Programmierung und Laufzeit und fehleranfällig: Zeitstempel müssen in Daten und zurück umgewandelt werden, dabei entstehen leicht implizite Abhängigkeiten zur System-Zeitzoneneinstellung.

 

Cobol und Excel machen es dem Java Datum vor.

Vorrangig für kommerzielle Anwendungen bestimmte Sprachen und Programme wie Cobol oder Excel vermeiden die skizzierten Probleme wie bei Java, indem sie Kalenderdaten eines bestimmten Intervalls auf ganze Zahlen abbilden. Dadurch ist eine sehr einfache Datumsarithmetik möglich.

Der Aufwand für die Konvertierung von und in die übliche Darstellung wird wesentlich durch die Auswahl des Datums für den Tag mit der Repräsentation 0 bestimmt.

 

Die Julianische Tageszahl ist die Lösung für das Java Datum.

Die Julianische Tageszahl, die übrigens nichts mit dem Julianischen Kalender zu tun hat, ist eine seit langem in der Astronomie bewährte Abbildung von Daten auf fortlaufende Ganzzahlen. Sie ermöglicht effektive Konvertierungen. Der Wochentag ist beispielsweise durch eine einfache Modulo-Operation bestimmbar. Das Datum in Java ebenfalls.

 

Implementation

Die Implementierung eines echten Datums in Java auf der Basis der Julianischen Tageszahl erfordert nur wenige Methoden und kommt vollständig mit Ganzzahl(Integer-)arithmetik  aus.

Programme, die Datumsberechnungen ausführen müssen, werden damit nicht nur einfacher und übersichtlicher. Der Verzicht auf Date- und Calendar-Instanzen macht sie sichtbar schlanker und verringert den Ressourcenverbrauch.

Interessiert? Dann lesen Sie mehr über die konkrete Implementierung eines Java Datums und die damit erreichte Einfachheit und Leistung. 

Fragen Sie unseren Experten

Juri Urbainczyk
Managing Consultant
it-consulting@agon-solutions.de


Whitepaper