Datentypen Datentyp für Datum

jf

Bekanntes Mitglied
Hallo, ganz kurze Frage:
Welcher Datentyp ist für die Verwaltung eines Zeitstempels (Datum+Uhrzeit) am geeignesten?
Hat da einer von euch Erfahrung und einen Tipp für mich? :)
 

jf

Bekanntes Mitglied
Ok, ich verwende bereits java.util.Date, konnte aber immer nur das Datum setzen, nicht aber die Zeit.

Also:
Java:
timestamp = Date.valueOf("2010-08-15"); // geht
nicht aber:
Java:
timestamp = Date.valueOf("2010-08-15 12:05:15.123"); // :(

Wie setze ich den Zeitstempel richtig, wenn dieser als Zeichenkette vorliegt?

Außerdem:
Java:
timestamp.getHours(); // wird als veraltet angezeigt

Wie implementiert man dies richtigerweise?
 

Der Müde Joe

Top Contributor
Java:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
Date date = df.parse("2010-08-15 12:05:15.123");

EDIT:
ach ja und
Java:
Calendar cal = new GregorianCalendar();
cal.setTime(date);
System.out.println(cal.get(Calendar.HOUR_OF_DAY));

EDIT2:
das Pattern wäre mit grossen HH
"yyyy-MM-dd HH:mm:ss.SSS"

kleine hh wären für: Hour in am/pm (1-12)
 
Zuletzt bearbeitet:

jf

Bekanntes Mitglied
Ok, super. Vielen Dank!
Aber wozu benötigt man da noch den Datentyp Date?

Wenn ich in einem Objekt (z. B. für einen Datensatz) den Zeitstempel ablegen will, sollte ich dann lieber Calendar verwenden oder doch bei Date bleiben? - Der Zugriff auf die Information läuft ja sowieso über Calendar und wäre damit etwas einfacher...
 

Der Müde Joe

Top Contributor
Neben den Gregorianischen Kalenders gibts nocht Julianische, Buddistische, JapaneseImperialCalendar wenn mal grad so reinschaue.

Das Date ist nichts anderes als die ms seit der Epoche (1.1.1970 00.00) (ein long). Einfacher gehts nicht.

Date ist ganze einfach. Drum nach Möglichkeit dabei bleiben.

>Der Zugriff auf die Information läuft ja sowieso über Calendar und wäre damit etwas einfacher...

Was heisst der Zugriff? Die Repräsentation der Daten und die Daten sind nicht unbedingt das selbe.

EDIT:
anzeigen kann mans auch so:
Java:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
System.out.println(df.format(new Date()));
 

jf

Bekanntes Mitglied
Hallo Joe, ich habe nun alles nach deinen Vorgaben gelöst. :)

Nun ist es aber so, dass ich zwar Stunden, Minuten, Sekunden, Tag und Jahr einwandfrei aus dem Datum ermitteln kann, aber beim Monat liefert mir
Java:
cal.get(Calendar.MONTH)
stets den Juli (also 7), nicht aber den August, welchen ich eigentlich angegeben habe ("2010-08-15 12:05:15.123").

Woran kann das liegen???
Wie löse ich das Problem?


Rein zum Verständnis:
Wenn ich die veralteten Funktionen aus Date verwende (also z. B. date.getHours()), dann funktionieren alle Methoden für die Uhrzeit (Stunden, Minuten, Sekunden) - die Methoden für das Datum (Tag, Monat, Jahr) gehen leider auch nicht. Was ist hier faul?
 

Murray

Top Contributor
Nun ist es aber so, dass ich zwar Stunden, Minuten, Sekunden, Tag und Jahr einwandfrei aus dem Datum ermitteln kann, aber beim Monat liefert mir
Java:
cal.get(Calendar.MONTH)
stets den Juli (also 7), nicht aber den August, welchen ich eigentlich angegeben habe ("2010-08-15 12:05:15.123").

Woran kann das liegen???
Ein Blick in die Dokumentation offenbart, dass der von Calendar.get( Calendar.MONTH) gelieferte Wert nullbasiert ist; 7 ist also der August. Probier doch mal
Java:
System.out.println( cal.get(Calendar.MONTH) == Calendar.AUGUST);
 

jf

Bekanntes Mitglied
Ein Blick in die Dokumentation offenbart, dass der von Calendar.get( Calendar.MONTH) gelieferte Wert nullbasiert ist; 7 ist also der August.
Ok, dass klärt die ganze Sache.
Allerdings ist dies doch recht eigenartig, schließlich sind alle anderen Angaben nicht nullbasiert.
Hat diese Festlegung einen tieferen, womöglich auch noch sinnvollen Grund?

Probier doch mal
Java:
System.out.println( cal.get(Calendar.MONTH) == Calendar.AUGUST);
Ich glaube dir. :)
 

jf

Bekanntes Mitglied
Ich verwende nun JodaTime - das ist wirklich etwas besser. :toll:
Danke raiL! :D

Jetzt möchte ich aber die verschiedenen Zeitstempel vergleichen.
Dabei möchte ich alle Datensätze von einem Tag zusammenfassen.
D. h., es sollte in etwa wie folgt aussehen:

Java:
if(datetime1.toDate() != datetime2.toDate())

Das Problem dabei dürfte sein, dass die Uhrzeit weiterhin durch toDate() mitgeliefert wird, was dazu führen dürfte, dass die Zeitstempel immer als ungleich erkannt werden.
Es sollte doch möglich sein, dass man nur das reine Datum erhält - also ohne Uhrzeit.
Warum gibt es kein .getDate()?

PS: .getDayOfMonth() geht natürlich nicht, da damit z. B. der 1. Feb und der 1. Mrz zusammengeworfen werden würden. Alle Daten (Tag, Monat, Jahr) zu vergleichen halte ich für etwas umständlich - das müsste mit JodaTime doch einfacher gehen!
 
G

Gelöschtes Mitglied 5909

Gast
mit != schon mal garnicht

equals() oder isEqual() gibt bei Joda Time auch

und so zeug wie isAfter() contains() overlaps() etc. Doku anguggen hilft.

Aber das was du suchst sind partials denk ich

LocalTime - An immutable implementation that represents a time without a date or time zone. * LocalDate - An immutable implementation that represents a date without a time or time zone.
* LocalTime - An immutable implementation that represents a time without a date or time zone.
* LocalDateTime - An immutable implementation that represents a datetime without a time zone.
* Partial - An immutable implementation that can store any combination of datetime fields. For example, using this class you could create a YearMonth or DayOfWeekDayOfMonth partial.
* YearMonthDay - Effectively deprecated - only supports the year, monthOfYear and dayOfMonth fields.
* TimeOfDay - Effectively deprecated - only supports the hour, minute, second and millisecond fields.

LocalTime (Joda time 1.6.1 API)

im Konstruktor kann man da auch ein DateTime übergeben
 

jf

Bekanntes Mitglied
mit != schon mal garnicht
Ok, dass war nur zur Veranschaulichung.

In anderen Programmiersprachen ist dies übrigens möglich - in VB wird das Datum z. B. als Fließkommazahl gespeichert: Vorkammawert=Tage seit 1900, Nachkommawert=Uhrzeit. Damit kann man dann ganz einfach >, < und != verwenden. Eigentlich eine recht sinnvolle Festlegung, wie ich finde. :)


Aber jetzt zum eigentlichen Grund dieses Kommentars:

Ich habe jetzt JodaTime für das Einlesen meiner Datenbank verwendet, und es hat bei über einer halben Millionen Datensätzen wunderbar funktioniert - doch bei einem kommt folgender Fehler:
Code:
Exception in thread "main" java.lang.IllegalArgumentException:
Cannot parse "2010-3-28T2:0:21": Illegal instant due to time zone offset transition (Europe/Berlin)
Ich verstehe diesen absolut nicht! - Das Datum scheint doch richtig zu sein... :bahnhof:

Hat jemand eine Idee?


EDIT: oder kann es sein, dass an diesem Tag von Winter- auf Sommerzeit umgestellt wurde?
Also von 2 Uhr auf 3:Uhr - und somit alle Zeiten zwischen 2:00 und 3:00 eigentlich nicht existieren können.
Gibt es dafür eine Methode, um solche Fehler sinnvoll abzufangen?
 
Zuletzt bearbeitet:

XHelp

Top Contributor
In anderen Programmiersprachen ist dies übrigens möglich - in VB wird das Datum z. B. als Fließkommazahl gespeichert: Vorkammawert=Tage seit 1900, Nachkommawert=Uhrzeit. Damit kann man dann ganz einfach >, < und != verwenden. Eigentlich eine recht sinnvolle Festlegung, wie ich finde. :)
Sicher? Verwechselst du es nicht zufällig mit
Code:
CDbl
Funktion? Und nur, weil man > und < machen kann, heißt es nicht, dass man es als Zahl gespeichert hält.
 

jf

Bekanntes Mitglied
Sicher? Verwechselst du es nicht zufällig mit
Code:
CDbl
Funktion? Und nur, weil man > und < machen kann, heißt es nicht, dass man es als Zahl gespeichert hält.
Ja, bin mir ziemlich sicher. Mit +1 kann man z. B. auch das Datum um einen Tag erhöhen.
Der Rückgabewert ist ebenfalls eine Fließkommazahl. - Aber jetzt bitte lieber bei meiner Frage bleiben. :)
 
G

Gelöschtes Mitglied 5909

Gast
Gibt es dafür eine Methode, um solche Fehler sinnvoll abzufangen?

aus einem String kann man es nicht vorhersagen. Wenn du die einzelnen werte als int/log oder so hast (tag, monat, jar, stunde,..)
dann wäre es möglich, da das ja an festgelegten tagen geschiet. problem ist dann nur wieder dass es zeitzonnen abhängig ist etc.


lange rede kurzer sinn:

try/catch zum abfangen.

Die eigentliche Frage ist aber, warum hast du diesen Datensatz in der DB? Arbeiten beide Systeme mit einer anderen Zeitzone?
 

jf

Bekanntes Mitglied
Hi raiL

lange rede kurzer sinn:
try/catch zum abfangen.
Ja, dass ist aber nur eine Notlösung, weil damit der bedreffende Datensatz verloren geht.

Die eigentliche Frage ist aber, warum hast du diesen Datensatz in der DB? Arbeiten beide Systeme mit einer anderen Zeitzone?
Nein, ich glaube nicht.
Aber vielleicht arbeiten die Systeme, welche die Daten aufzeichen nur mit Winterzeit.
Es kann allerdings auch sein, dass die Systeme doch auf Sommerzeit umstellen, diese Umstellung aber über einen GPS-Abgleich erfolgt, welcher z.B. erst einige Stunden nach der eigentlichen Umstellung stattfindet... - auf das Verhalten dieser Systeme habe ich leider keinen Einfluss, genauso wenig, wie ich detailierte Informationen über deren Verhalten besitze. :(

Kann man JodaTime so einstellen, dass es immer nur mit Winterzeit arbeitet?
Dann sollte der Fehler ja nicht mehr auftreten.
 

jf

Bekanntes Mitglied
Ich arbeite mittlerweile erfolgreich mit DateTime - diese Bibliothek ist wirklich besser als java.util.Date :toll:

Mir fehlen allerdings doch noch ein paar für mich sinnvolle Methoden, daher wollte ich eine eigene Klasse erstellen, welche DateTime erweitert und meine benötigten Methoden zusätzlich implementiert. - Dies ist aber irgendwie nicht möglich... Wieso ist das so? Und gibt es doch noch eine Möglichkeit von dieser Klasse zu erben?
 

jf

Bekanntes Mitglied
Ok, danke für den Link.

Finde dieses Konzept ungünstig - hier wird unötig Flexibilität geopfert!
Es muss doch meine Entscheidung als Programmierer sein, ob mir die Leistung und die Sicherheit mit einer erweiterten Klasse ausreicht.

Naja, dann werde ich wohl oder übel mit Komposition arbeiten müssen... - einen Trick, welchen man nutzen könnte wird es wohl nicht geben. :(
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
Kanaska Datentyp für Zahlenbereiche Java Basics - Anfänger-Themen 7
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
1 Neuen Datentyp für rationale Zahlen als Klasse entwickeln Java Basics - Anfänger-Themen 20
Binary.Coder Welcher Datentyp für den Simplex Algorithmus Java Basics - Anfänger-Themen 3
B Datentyp für +,-,*,/ Java Basics - Anfänger-Themen 5
W Datentypen Operatoren für eigenen Datentyp nutzen Java Basics - Anfänger-Themen 2
F Datentypen Wertebereiche passender Datentyp Java Basics - Anfänger-Themen 5
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
D Arraylist mit Komplexen Datentyp Java Basics - Anfänger-Themen 3
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
H Datentyp mit 3 Zuständen Java Basics - Anfänger-Themen 42
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
A Datentyp char Java Basics - Anfänger-Themen 27
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
T Datentyp mit Anführungszeichen drinnen Java Basics - Anfänger-Themen 3
R Datentypen Datentyp String lenght & charAT Java Basics - Anfänger-Themen 4
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
B Datentypen Datentyp welcher den gleichen Namen wie die Klasse trägt? Java Basics - Anfänger-Themen 1
D Datentypen Welcher ist der beste Datentyp? Java Basics - Anfänger-Themen 28
F Datentypen Missverständnis Datentyp Java Basics - Anfänger-Themen 2
D Rechnen mit numerischen Datentyp Frage Java Basics - Anfänger-Themen 16
E Klassename als Datentyp??? Java Basics - Anfänger-Themen 4
F Wertebereich/Datentyp Java Basics - Anfänger-Themen 26
M Datentypen Java Datentyp Definition Java Basics - Anfänger-Themen 6
MiMa Datentyp Short Wert zuweisen über Methode Java Basics - Anfänger-Themen 2
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
E Datentypen Benutzerdefinierten Datentyp verwenden Java Basics - Anfänger-Themen 1
ms_cikar Java Datentyp unwandlung Java Basics - Anfänger-Themen 7
G Datentypen Tipps, Ratschläge erwünscht bzgl. Datentyp bestimmen über Wertebereich Java Basics - Anfänger-Themen 5
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
M Interface als Datentyp Java Basics - Anfänger-Themen 12
R Variablen Datentyp erst während Laufzeit festlegen Java Basics - Anfänger-Themen 6
R Datentypen Datentyp eines Werts in einer Textdateizeile abfragen und ändern Java Basics - Anfänger-Themen 4
R Interface Datentyp bei Erzeugung eines Objekts, dessen Klasse eine Schnittstelle implementiert Java Basics - Anfänger-Themen 18
B Collections Collection soll nur einen bestimmten Datentyp aufnehmen Java Basics - Anfänger-Themen 12
V Datentypen Frage zum Datentyp Byte Java Basics - Anfänger-Themen 11
B datentyp in binär umwandeln Java Basics - Anfänger-Themen 5
S Primitiver Datentyp Short , Vorteil/Nachteil Betrachtung Java Basics - Anfänger-Themen 6
J Field auf Datentyp prüfen Java Basics - Anfänger-Themen 8
D Datentyp Object Java Basics - Anfänger-Themen 2
A Datentypen Mehrdimensionaler Datentyp gesucht Java Basics - Anfänger-Themen 4
D Datentypen Abstrakter Datentyp lässt sich nicht casten Java Basics - Anfänger-Themen 7
F Klassenorganisation: Datentyp in Datentyp anlegen Java Basics - Anfänger-Themen 3
N Unerklärlich: Rekursiver Algorithmus gibt falschen Datentyp zurück... Java Basics - Anfänger-Themen 4
J Datentypen Was ist der Sinn vom Datentyp "char" ? Java Basics - Anfänger-Themen 11
G Eigener Autoboxing Datentyp Java Basics - Anfänger-Themen 3
Guybrush Threepwood Effizientester Datentyp zur Speicherung einer ungeordneten Menge von ints Java Basics - Anfänger-Themen 8
D Datentypen Rekursiver Datentyp Java Basics - Anfänger-Themen 8
GianaSisters Auf Datentyp überprüfen Java Basics - Anfänger-Themen 13
M Array mit komplexem Datentyp Java Basics - Anfänger-Themen 9
M 2 Arrays mit komplexen Datentyp vergleichen Java Basics - Anfänger-Themen 8
G Datentypen Welcher Datentyp Java Basics - Anfänger-Themen 2
F Datentypen Welchen Wert hat ein einfacher Datentyp nach der Deklaration? Java Basics - Anfänger-Themen 6
B Java Bean, JSP, Komplexer Datentyp Java Basics - Anfänger-Themen 3
I Datentypen Eigener DatenTyp Java Basics - Anfänger-Themen 2
E Datentyp Array Java Basics - Anfänger-Themen 10
M Datentypen Eigenen Datentyp toArray() Java Basics - Anfänger-Themen 4
A Datentyp Char wird in BlueJ nur als leerer weißer Kasten dargestellt Java Basics - Anfänger-Themen 1
N Frage zu Datentyp byte Java Basics - Anfänger-Themen 14
F Datentyp Number???? Java Basics - Anfänger-Themen 2
A einlesen, schreiben, umwandlung datentyp Java Basics - Anfänger-Themen 10
A Datentyp mit String festlegen? Java Basics - Anfänger-Themen 13
D Generischer Datentyp Java Basics - Anfänger-Themen 2
D Datentyp: Liste von String->Double dingern Java Basics - Anfänger-Themen 4
K Datentyp vs. Datenstruktur - Unterschiede Java Basics - Anfänger-Themen 13
C Datentyp von einer Variablen ermitteln. Java Basics - Anfänger-Themen 12
M Datentyp Parameter Java Basics - Anfänger-Themen 18
R Welchen Datentyp verwenden? Java Basics - Anfänger-Themen 12
B Datentyp anlegen Java Basics - Anfänger-Themen 6
M Eigene Klasse mit "Enumeration"-Datentyp verknüpfe Java Basics - Anfänger-Themen 16
K Datentyp Problem Java Basics - Anfänger-Themen 2
X Rekursion & Generischer Datentyp Java Basics - Anfänger-Themen 11
A neuen Datentyp (Digit) definieren Java Basics - Anfänger-Themen 12
A Datentyp String in char umwandeln Java Basics - Anfänger-Themen 3
J datentyp -objectTyp Rückgabe Java Basics - Anfänger-Themen 2
D Superinterface als Datentyp Java Basics - Anfänger-Themen 5
E Generischer Datentyp und Arrays Java Basics - Anfänger-Themen 3
Z ArrayList<Entry<Datentyp, Integer>> ? Java Basics - Anfänger-Themen 12
L Datentyp Problem Java Basics - Anfänger-Themen 7
F Datentyp eines Inputs überprüfen Java Basics - Anfänger-Themen 2
NightmareVirus Datentyp des Arrayinhalt abfragen Java Basics - Anfänger-Themen 4
S Probleme mit Datentyp beim Einlesen Java Basics - Anfänger-Themen 4
C Datentyp byte Java Basics - Anfänger-Themen 22
G Java Problem [Datentyp] Java Basics - Anfänger-Themen 10
B Datentyp char -> Zeichen um einen Wert erhöhen Java Basics - Anfänger-Themen 12
M long Datentyp effizient mit Daten füllen Java Basics - Anfänger-Themen 2
S Datentyp aus 3 longs Java Basics - Anfänger-Themen 3
M datentyp ausfindig machen Java Basics - Anfänger-Themen 2
C Eigenen Datentyp schreiben Java Basics - Anfänger-Themen 13
T Probleme mit Datentyp Double Java Basics - Anfänger-Themen 4
W Datentyp Zahlen sortieren Java Basics - Anfänger-Themen 12
B Datentyp gesucht Java Basics - Anfänger-Themen 5
J Datentyp einer Klasse bei Anwendung von implements Java Basics - Anfänger-Themen 4
R Datentyp Ring - zyklisch doppelt verkettete Liste - HILFE! Java Basics - Anfänger-Themen 12
M Linkedlist, wert auf datentyp prüfen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben