# Welchen Date-Typ



## Dagobert (26. Dez 2009)

Erstmal FROHE WEIHNACHTEN,

Ich möchte gerne in einer Datenbank u.a. Datumsangaben speichern und später wieder verwenden also differenzen berechnen usw. . Nun bietet Java ja nicht nur eine Datumsklasse an. Welche sollte ich am besten in zusammenarbeit mit SQL benutzen und welchen Datentyp soll ich in SQL verwenden?

Ich habe imo in der Datenbank den Typ Timestamp verwendet.

mfg. Dagobert


----------



## X3TitanCore (26. Dez 2009)

Dann würde ich immer einen Timestamp benutzen. Damit kann man am einfachsten rechnen und hinterher das Ergebnis wieder in ein Datum umwandeln wenn man es braucht.


----------



## Dagobert (26. Dez 2009)

okay danke, und mit welchem Typ sollte ich in Java benutzen? Auch das "Normale" util Date oder ehr Calendar? oder oder oder? 

Okay du meinst ich soll in java auch nen timestamp benutzen?  Jetzt komme ich dahinter^^ hat ein bisschen gedauert 

mfg. Dagobert


----------



## X3TitanCore (26. Dez 2009)

Du kannst in Java auch ein long nehmen. Du bekommst ja aus einem Date Objekt den Timestamp als long heraus mit getTime(). Und in der DB halt als Integer speichern.


----------



## Dagobert (26. Dez 2009)

Ich habe gerade dazu etwas interessantes in einem anderem Forum gefunden was ich bis jetzt nicht wusste^^.


> Ein TIMESTAMP Feld wird bei jeder Änderung an dem Datensatz auf die aktuelle Zeit gesetzt, aber dies betrifft immer nur das erste TIMESTAMP Feld, falls es mehr als eins in der Tabelle gibt.


Auch nochmal hier nachzulesen.
[link]http://www.sqlteam.com/print/timestamps-vs-datetime-data-types[/link]
Desweiteren habe ich gerade mehr dazu gefunden was mir nicht passt. Also TIMESTAMP scheint nicht für die Datumsspeicherung geignet zu sein.
Ich werde das ganze mal wieder auf DateTime umstellen, aber mein größeres Problem ist dann wie ichs am einfachsten in Java behandelt. Ich habe mich bis jetzt noch nicht wirklich mit dem Thema: Datum beschäftigt. 

mfg. Dagobert


----------



## X3TitanCore (26. Dez 2009)

Genau deswegen speicher ich immer ein Datum als Integer in einer Datenbank. Ein Timestamp ist ja nichts anderes als ein Int oder in Java halt long. Die Sekunden seit dem 1.1.1970. Warum soll ich das in ein Date Feld packen???? Weil man es besser lesen kann????

Und aus ein Integerfeld aus der DB auszulesen und dann in Java wieder ein Dateobjekt daraus zu machen ist für mich die einfachste Variante. Mal ganz abgesehen wenn es darum geht damit zu rechnen.

MfG


----------



## Dagobert (26. Dez 2009)

aber dann verlierste doch die ganzen Datumsfunktionen von sql oder? Haste die dann in java nochmal geschrieben?


----------



## X3TitanCore (26. Dez 2009)

Ich benutze dann die von Java oder die Calendar Klasse von Java.


----------



## frapo (4. Jan 2010)

Dagobert hat gesagt.:


> aber dann verlierste doch die ganzen Datumsfunktionen von sql oder? Haste die dann in java nochmal geschrieben?



Eben darum würde ich das nie so machen. Wenn man Timestamp in der DB nutzt, kann man auch immer schön per SQL Abragen auf der DB machen. Was würde es mir nutzen wenn ich statt eines Datums nur einen Long-Wert zurückbekomme? Halte ich für schlecht lesbar. 

Wenn natürlich sicher ist, das auf der DB nie Abfragen won Hand laufen werden, könnte man die Variante mit dem Long-Wert andenken.. wie gesagt, ich würde es nie so machen.. man weiß nie, ob man nicht irgendwann doch mal von Hand ran muss oder will. 

Gruß
frapo


----------



## X3TitanCore (4. Jan 2010)

Na ja ich guck ja nicht direkt in der DB nach nem Datum. Das sollte die Software für mich erledigen.


----------



## frapo (4. Jan 2010)

X3TitanCore hat gesagt.:


> Na ja ich guck ja nicht direkt in der DB nach nem Datum. Das sollte die Software für mich erledigen.



Das sieht in der Praxis allerdings ganz anders aus. Oft hast du eine DB mit vielleicht mehreren Frontends. Das kann dann beispielsweise eine Java-Anwendung sein, eine PHP-Anwendung, ein Berichtgenerator etc. In so einem Fall kann es dann schwierig werden, wenn andere Frontends das long nicht oder anders interpretieren. Ich habe bisher noch nie mit einer DB gearbeitet, an der ich nicht auch mal mit der Hand ran musste bzw. das meiste machte man direkt per SQL auf der Konsole.

Echte 'Datenbank-Freaks' vertreten nicht umsonst die Ansicht, das die Datenhaltung, also auch die Auswahl und Kontrolle der Datentypen, unbedingt Sache des RDBMS sein sollten.


----------



## X3TitanCore (5. Jan 2010)

Da hast du schon recht. Man hat halt den Vorteil das man schnell mal nachsehen kann welches Datum in dem Feld steht und muß nicht erst den Taschenrechner auspacken. Ist mir in meinen Projekten bisher ganz selten passiert. Ist halt Anwendungsbezogen. Wenn man das braucht dann muß man halt ein date Feld nehmen.

Was die Datenhaltung angeht, so hält ein Timestamp als long genau die gleichen Informationen nur in einer für uns Menschen nicht so leicht lesbaren Form. Der DB ist es egal in welcher Form sie ein Datum speichert. Date Felder sind nur eine Hilfe für uns.

Date beginnt im Jahr 0 0Uhr
Timestamp am 1.1.1970 0Uhr

Alles andere ist gleich. Das eine ist für uns lesbar das andere nicht.

Hier gilt es halt Anwendungsbezogen zu entscheiden. Da Dagobert geschrieben hat das er später differenzen berechnen will, ist es halt leichter mit einem Timestamp zu arbeiten wenn man nicht unbedingt die Lesbarkeit in der DB benötigt.


----------

