Wie sollte am besten ein Datum gespeichert werden?

MiMa

Top Contributor
Hi,
beim Handling mit dem Datum habe ich immer wieder den Dateityp der Objektvariable von Datums geändert.
Mittlerweile habe ich schon einige Methoden zur Ausgaben (String), Auszug Jahr(in) und das Handling (Millisekunden) geschrieben und möchte es gerne etwas übersichtlicher machen weil es schon einiges an Datumsangaben sind mit denen ich arbeite.
Datumsangaben sollen neben dem Ausgeben auch verglichen werden und ebenfalls in eine MySQL Datenbank gespeichert werden.
Daher möchte ich mal nachfragen, in welchem Datentyp man ein Datum mit Uhrzeit am besten in eine Objektvariable speichert (String, Date, Millis,...) um das ständige konvertieren etwas zu minieren?

Danke
Mi
 

LimDul

Top Contributor
Persönlich würde ich ein Datum mit Uhrzeit speichern, als was es ist - ein Datum mit Uhrzeit: LocalDateTime. Ich sehe da mehrere Vorteile:
Man sieht sofort, dass es ein Datum mit Uhrzeit ist. Bei einem String oder Millisekunden sieht man das dem Code nicht an. Insbesondere ein String wäre ein Graus, weil niemand garantiert dir, dass nicht irgendwo Konvertierungsfehler entstehen (Locale lässt grüßen). Insbesondere hat man mit der API von Java dann auch schon mächtiges Werkzeug für alle Operationen darauf unter korrekter Berücksichtigung solcher Dinge wie Schaltjahre, verschiedene Tage pro Monat etc. In der Datenbank wird es dann auch out of the Box als Datum mit Uhrzeit gespeichert, was damit auch Anfragen und Co es erlaubt mit dem Datum sinnvolle Abfragen zu formulieren, zu rechnen etc.

Meine Präferenz wäre:
Echtes Datumsobjekt (LocalDateTime) vor Millisekunden und das immer noch Lichtjahre vor String.
 

MiMa

Top Contributor
Aktuell sind die Datumsangaben als String in den Instanzvariablen welche ich oft mit dem SimpleDateFormat in das gewandelt habe was ich halt benötigte.

Zum Prüfen habe ich eine Methode geschrieben mit einigen eigenen Untermethoden die Datums in Strings zerlegt und diese vergleicht, oder auch ein Datum auf Echtheit prüft.
Java kenne ich nicht gut genug um zu erkennen ob es da noch etwas einfacheres gibt um zwei Datums zu vergleichen und das jüngste oder das älteste heraus zu finden?

Hier ist mal ein Beispiel wie ich aus einem Datum das Jahr ermittel
Jahr ermitteln mit Strings und gibt ein int zurück
Java:
public static int sucheJahr(String datum) {
        int laenge = datum.length();
        int punkt = datum.lastIndexOf('.');
        String jahrDatum = datum.substring(punkt + 1, laenge);
        int jahr = Integer.parseInt(jahrDatum);
        return jahr;
    } // sucheJahr
Gleiche Methode, die ein String zurückgibt
Java:
public static int sucheJahr(String datum) {
        int laenge = datum.length();
        int punkt = datum.lastIndexOf('.');
        String jahr= datum.substring(punkt + 1, laenge);
        return jahr;
    } // sucheJahr
Beide Funktionieren und liefern den richtigen Wert zurück

Dann habe ich es mal mit Calendar probiert welches mir ebenfalls ein korrektes Jahr zurück lieferte, aber der Monat falsch war?
Java:
public static int sucheJahr(long datum) {
        // Last modified gibt long zurück
        Calendar kalender = Calendar.getInstance();
        kalender.setTimeInMillis(datum);
       
        int cJahr = kalender.get(Calendar.YEAR);
        int cMonat = kalender.get(Calendar.MONTH);
        int cTag = kalender.get(Calendar.DAY_OF_MONTH);
       
        LOG.info("Jahr  : " + cJahr);
        LOG.info("Monat : " + cMonat);
        LOG.info("Tag   : " + cTag);
       
        return cJahr;
    } // sucheJahr;
Hier habe ich den long wert als Parameter verwendet, weil die Methode lastModified() ein long zurück gibt.
Logausgabe des Methode sucheJahr durch die Methode mit Calendar.
Code:
2020-05-10 15:56:52 [main] INFO  Dateiarten.Datei - Das Änderungsdatum ist       : 25.09.2017
2020-05-10 15:56:52 [main] INFO  Dateiarten.Datei - *****************************************************************************
2020-05-10 15:56:52 [main] INFO  Funktionen.Datum - Jahr  : 2017
2020-05-10 15:56:52 [main] INFO  Funktionen.Datum - Monat : 8
2020-05-10 15:56:52 [main] INFO  Funktionen.Datum - Tag   : 25
Ein gutes Gefühl habe ich dann bei der Methode mit Calendar nicht.

Daher möchte ich die Datumsangaben so speichern, damit ich den großen Zirkus aufräumen und etwas vereinheitlichen kann.
 
Zuletzt bearbeitet:

LimDul

Top Contributor
Deswegen nimm LocalDate bzw. LocalDateTime.

Calendar hat eine Grauenhafte API, damit wirst du nicht glücklich.

Java kenne ich nicht gut genug um zu erkennen ob es da noch etwas einfacheres gibt um zwei Datums zu vergleichen und das jüngste oder das älteste heraus zu finden?
Das geht damit ganz einfach:

Java:
LocalDate datum1 = ....;
LocalDate datum2 = ....;

if (datum1.isAfter(datum2)) { ...
}

Hier gibt es mehr Informationen zu der API :http://openbook.rheinwerk-verlag.de/java8/05_009.html

String ist die schlechteste aller Varianten (wobei die Calendar-API nicht viel besser ist ...), weil:
- in und her wandeln ist aufwendig
- Man kann nicht rechnen, man muss immer aus dem String zurückwandeln
- Wenn man nicht bei der jeder Komvertierung genau drauf achtet, auch immer das gleiche Locale mitzugeben, hat man unter Umständen auf einmal Abweichungen
- Will man eine andere Darstellung für Ausgabe muss 2x wandeln String => long => String.
 

MiMa

Top Contributor
Als ich vor ein paar Jahren mit Java angefangen und mich mit Datum beschäftige, wählte ich String weil es einfach erschien.
Nach und nach stellte ich fest, das ich verschiedenes davon benötigte und konvertierte mit eigenen Methoden.
Das war aber bisher alles nicht so tragisch, da ich Java Lernte und lerne noch heute.
Ich programmierte immer aktuell benötigte kleine Module welche ich immer in der IDE ausgeführt hatte.
Es wurde aber nie ein richtiges Programm weil ich auch keine Kenntnisse über GUI Programmierung hatte.
Jetzt fange ich an, all meine kleinen Programmodule zu einem großen Programm zusammen zu fügen und erkenne jetzt das doch noch einige Änderungen anstehen.

Ich sehe, das LocalDate und LocalDateTime wesentlich komfortabler ist das Jahr zu ermitteln.
In die Instanzvariable werde ich LocalDateTime speichern damit ich das Datum und auch die Zeit habe und damit keinen Verlust der Zeit habe.
Ich sehe jetzt schon das ich auf einige meiner Methoden verzichten kann und der Code dadurch übersichtlicher wird.

Eine meiner Mammut Methoden ist das prüfen eines echten Datums.
Ich habe jetzt keine Option gefunden um dies mit LocalDateTime zu machen, gibt es da eine andere einfache Möglichkeit?

Danke
Mi
 

MiMa

Top Contributor
Eine Frage taucht noch auf nachdem ich versucht habe ein LocalDateTime zu erzeugen und füllen.
Plötzlich taucht da im code folgendes auf?
new org.joda.time.LocalDateTime(i1...i5);

LocalDateTime von org.joda.time obwohl ich import java.time.LocalDateTime im Kopf implementiert habe.
Dann gibt es noch LocalDateTimeConverter von apache und javafx

Ist LocalDateTime nicht bestandteil von Java?
Zumindest steht im Doc das es Java DBase wäre?
 

mrBrown

Super-Moderator
Mitarbeiter
LocalDateTime ist Bestandteil des JDKs. JodaTime war das "Vorbild" dafür, deshalb heißen viele Dinge gleich, nutzen solltest du aber die Klassen aus dem JDK, wenn du nicht zwingend durch andere Libs auf JodaTime angewiesen bist.
Wenn deine IDE das vorschlägt, solltest du das einfach ignorieren, und falls du ein Dependency-Management-System nutzt mal gucken, was JodaTime ins Projekt zieht.

Dann gibt es noch LocalDateTimeConverter von apache und javafx
LocalDateTimeConverter brauchst du nicht direkt nutzen, der ist zB in JavaFX für das Konvertieren von LocalDateTime <-> Text da.
(Wenn musst du einen LocalDateTimeConverter an einen JavaFX-Komponente übergeben, selber konvertieren solltest du damit aber nicht müssen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
MiMa Was sollte man ins JavaDoc implementieren?? Allgemeine Java-Themen 17
R In der Ausgabe sollte anstelle des obersten Sterns ein "+" stehen nur scheitere ich bei der Implementierung Allgemeine Java-Themen 9
T Multithreading: Wie viele Threads sollte ich erstellen? Allgemeine Java-Themen 12
J wie sollte man sinnvoll seinen Code aufteilen Allgemeine Java-Themen 6
R Input/Output java.io.EOFException, obwohl sie abgefangen sein sollte? Allgemeine Java-Themen 3
DaniSahne96 Threads Code funktioniert nicht wie er sollte Allgemeine Java-Themen 9
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
R Syntax Error, der keiner sein sollte Allgemeine Java-Themen 12
V Fortbildungen oder Zertifikate in Java die man haben sollte? Allgemeine Java-Themen 17
André B. Was sollte eine Template Engine können? Allgemeine Java-Themen 3
A Warum gibts die Main und was sollte drin stehen? Allgemeine Java-Themen 31
B Was sollte ich benutzen Vektor oder ArrayList? Allgemeine Java-Themen 5
A Weshalb man Parameter auf Gültigkeit prüfen sollte Allgemeine Java-Themen 6
D NullPointerException wo keine sein sollte. Allgemeine Java-Themen 2
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
ZH1896ZH Best Practice Wie erstellt man am besten einen Kalender? Allgemeine Java-Themen 3
W Updates - wie am Besten verteilten? Allgemeine Java-Themen 9
L Schlüsselworte Wie kann ich am Besten ein LocalDate zwischen Anfangs und EndDate checken Allgemeine Java-Themen 10
B Wie kann ich meine Pläne am besten umsetzen? Allgemeine Java-Themen 2
D Best Practice Login-Daten: Wie am besten abrufen? Allgemeine Java-Themen 6
O OOP Wie macht man das am besten OO? Allgemeine Java-Themen 8
Thallius Wie verstecke ich meinen private Key am besten im Code? Allgemeine Java-Themen 10
A Datentypen Generics: Wie am besten auf Typparameter zugreifen Allgemeine Java-Themen 2
Joew0815 Best Practice Wie am besten Plugin-System erstellen? Allgemeine Java-Themen 12
M interaktive grafische Oberfläche - wie mach ich das am Besten Allgemeine Java-Themen 4
S Wie reicht man am Besten Zahlenwerte von der GUI zum Code, der damit arbeitet? Allgemeine Java-Themen 10
C Hilfe bei Adressbuch-Programmierung, wie am Besten mit JList implementieren Allgemeine Java-Themen 2
B Wie Duration am besten abbilden Allgemeine Java-Themen 2
N unzählige Werte am besten speichern(?) Allgemeine Java-Themen 2
A Wie am besten Daten auslagern um heap zu schonen Allgemeine Java-Themen 4
X JDK updaten - wie am besten vorgehen? Allgemeine Java-Themen 5
L Wie kann man dieses "Table" Problem am besten löse Allgemeine Java-Themen 8
N Wie sortiere ich String Arrays am besten Allgemeine Java-Themen 5
D wie gliedere ich dieses programm am besten? dringend! Allgemeine Java-Themen 3
E Code für Tabulator (am besten ne komplette Übersicht) Allgemeine Java-Themen 2
S Build-Zeitpunt (Datum und Uhrzeit) irgendwie während der Laufzeit zugänglich machen..? Allgemeine Java-Themen 4
T Datum OHNE Uhrzeit Zeitzonen-übergreifend Allgemeine Java-Themen 4
W Datum anzeigen Allgemeine Java-Themen 10
MiMa Datum von zweistelliger Jahreszahl auf 4 Stellen aufrüsten? Allgemeine Java-Themen 4
MiMa Datum von String zu LocalDateTime Allgemeine Java-Themen 8
Thallius Wie parse ich dieses Datum richtig? Allgemeine Java-Themen 5
G Excel Datum richtig auf der Konsole ausgeben Allgemeine Java-Themen 1
Hatsi09 Heutiges Datum Allgemeine Java-Themen 3
J Countdown für Datum und Uhrzeit Allgemeine Java-Themen 4
MiMa Das Datum Format ist mir unbekannt. Allgemeine Java-Themen 1
G Datum letzte 7 tage Allgemeine Java-Themen 6
A Datum und Uhrzeit in andere Zeitzone umrechnen Allgemeine Java-Themen 7
W Datum prüfen + zweistellig Allgemeine Java-Themen 11
M Datum Zeitdifferenz in Stunden umrechnen Allgemeine Java-Themen 4
E Datei anhand Datum identifizieren Allgemeine Java-Themen 3
Dechasa Java 8 - Datum vergleichen Allgemeine Java-Themen 5
M Datum umwandeln. Allgemeine Java-Themen 1
P Datum im gewünschten Bereich Allgemeine Java-Themen 21
N Zeitabstand zwischen 2 Daten(Mehrzahl von Datum) Allgemeine Java-Themen 3
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
Bluedaishi String Array mit Datum und Uhrzeit String sortieren Allgemeine Java-Themen 6
M Aktuelle Systemzeit und Datum abfragen Allgemeine Java-Themen 2
M datei aufruf datum auslesen Allgemeine Java-Themen 5
R Datum in Excel Tabelle eintragen Allgemeine Java-Themen 6
T auf Valides Datum prüfen Allgemeine Java-Themen 12
E Datum in Kw umrechen Allgemeine Java-Themen 3
E Datum in String Allgemeine Java-Themen 4
K Datum+Uhrzeit in Millisekunden (long) umwandeln Allgemeine Java-Themen 7
C jollyday: prüfen, ob Datum = Feiertag Allgemeine Java-Themen 8
F Tests mit dynamischem Datum Allgemeine Java-Themen 2
K Datum ermitteln Allgemeine Java-Themen 4
N Datum auf 00:00:00 Uhr normalisieren Allgemeine Java-Themen 3
A einzelne Tage als Datum ausgeben Allgemeine Java-Themen 6
S Datum vergleichen - ohne Hilfsmittel Allgemeine Java-Themen 8
T Aktuelles Datum auslesen Allgemeine Java-Themen 2
T Datum um ein Tag reduzieren Allgemeine Java-Themen 6
S log4j, Datum in Fileappendern formatieren Allgemeine Java-Themen 4
V Apache POI Excel Datum auslesen Allgemeine Java-Themen 6
C Datum in Excel auslesen Allgemeine Java-Themen 13
J Funktion zu einer Uhrzeit/datum ausführen Allgemeine Java-Themen 4
M Datum/Uhrzeit in ein Textfeld schreiben Allgemeine Java-Themen 28
L Gregorian Calender falsches Datum Allgemeine Java-Themen 2
0 Datum in Java Date umwandeln Allgemeine Java-Themen 4
S String-Array nach Datum sortieren Allgemeine Java-Themen 10
J Datum und Zeit Allgemeine Java-Themen 4
B Jfree Chart mit Datum und Uhrzeit Allgemeine Java-Themen 6
B Datum jetzt vor einer Woche Allgemeine Java-Themen 5
B warum zählt der Kalender das Datum nicht weiter Allgemeine Java-Themen 2
V Datum vergleichen Allgemeine Java-Themen 7
C Datum erstellen für SQL Format Date Allgemeine Java-Themen 3
C Datum zurücksetzen Allgemeine Java-Themen 9
A String zu Datum parsen - SimpleDateFormat Problem Allgemeine Java-Themen 8
G File.listFiles nach Datum sortiert ausgeben Allgemeine Java-Themen 1
A Datum parsen Allgemeine Java-Themen 9
G Datum vergleichen Allgemeine Java-Themen 5
C Datum addieren Allgemeine Java-Themen 2
G Timestamp aus Datum Allgemeine Java-Themen 4
B Herausfinden ob Datum existiert Allgemeine Java-Themen 2
H2SO3- string mithilfe von .matches als datum identifizieren Allgemeine Java-Themen 4
Z Datum ohne Format-Kenntnisse parsen Allgemeine Java-Themen 5
C ArrayList nach Datum sortieren Allgemeine Java-Themen 7
G Datum um 1 Monat verschoben Allgemeine Java-Themen 3
J Umwandeln von einem String in ein Datum Allgemeine Java-Themen 8
M Aus Anzahl Tagen Datum ermitteln Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben