# vernümpftig Datumsangabe in mySQL DB speichern und auslesen



## oetzi (13. Okt 2009)

Hallo zusammen,

ich bräuchte mal ein, zwei Tipps von erfahrenen Leuten.

Wenn ich Daten (Datumsangaben) in einer Datenbank (ich benutze mysql) speichern will und diese auch wieder auslesen und weiterverarbeiten möchte, wie stelle ich sowas vernümpftig an?

Ich merke nämlich gerade, dass irgendwas bei mir ziemlich schief läuft.
Bis jetzt speichere ich Daten als String im Format "yyyy.MM.dd HH:mm:ss" in der Datenbank.
Jetzt bin ich gerade an einer Stelle, an der ich ein gespeichertes Datum mit dem aktuellen vergleichen möchte.

Der relevante Code sieht so aus:

```
SimpleDateFormat formatter = new SimpleDateFormat ("yyyy.MM.dd HH:mm:ss");
toWork = formatter.parse(StatusList.get(i).getRemainsTill());
currentTime = new Date();
System.out.println(currentTime);
System.out.println(toWork);
```
Die Ausgabe dann so:
Tue Oct 13 14:07:29 CEST 2009
Sat Apr 01 14:07:13 CET 19 <--???? 

Warum macht der mir bitte den 01.04.0019 da draus? 
Wenn ich direkt auf der Datenbank ein SELECT mache, sieht alles gut aus, sprich dort steht das richtige Datum!

Naja, nach verschiedenen Versuchen das ganze irgendwie anders zu speichern, formatieren und zu parsen wollte ich halt mal fragen, wie man grundsätzlich mit Datumsangaben und Datenbanken arbeitet?

Wäre für Hilfe dankbar!

Schönen Gruß
oetzi


----------



## SlaterB (13. Okt 2009)

alles hängt doch davon ab, was StatusList.get(i).getRemainsTill() ist, und diese Infomation verschweigst du..


```
public class Test
{
    public static void main(String[] args)
    {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
        Date currentTime = new Date();
        Date toWork = formatter.parse("19.04.01 12:00:00");
        System.out.println(currentTime);
        System.out.println(toWork);
    }
}
```
schon kommt Jahr 19 raus


----------



## ARadauer (13. Okt 2009)

> Bis jetzt speichere ich Daten als String im Format "yyyy.MM.dd HH:mm:ss" in der Datenbank.


warum speicherst du das Datum nicht als DATETIME in der Datenbank?

Schreiben mit einem PreparedStament und setDate.
Lesen mit getDate des ResultSets...


----------



## oetzi (13. Okt 2009)

mhpf, sorry, zu früh den code abgeschnibbelt.


```
System.out.println("StatusList.get(i).getRemainsTill());
```
Ausgabe:
13.10.2009 14:07:13

aber du hast mir mit deinem Code schon den richtigen Denkanstoß gegeben!
Das Problem war wirklich nur, dass ich das falsche Format verwendet habe...
Manchmal übersieht man auch eigentlich recht simple Sachen...

Vielen Dank!!


----------



## Tharsonius (21. Okt 2009)

Ich habe anfangs Datumsangaben ebenfalls in der Form abgelegt wie Du. Mit der Größe der Datenbank wuchs aber auch die zeit, die es dauerte auf Datumsangaben zu prüfen. Vor allem da meine Anwendung praktisch alles von der zeit abhängig macht und Abläufe anhand Zeit prüft.

Ich bin dazu übergegangen Zeitangaben in als BigInt zu speichern.

Der 2. Januar 2009 um 13 Uhr 25 Minuten und 12 Sekunden ergibt bei mir:
20090102132512

Das hat den Vorteil, dass ich wesentlich schneller verschiedene Datumsangaben vergleichen kann und vor allem gescheit nach Zeitabschnitten mittels SQL suchen kann.


----------

