Datum OHNE Uhrzeit Zeitzonen-übergreifend

TomH

Mitglied
Hallo zusammen,
ich bin jetzt nach so vielen Jahren auf ein (vermeintlich simples) Problem gestoßen, wofür ich aber keine Lösung finde.

In unserer Anwendung gibt es Datumswerte mit und ohne Uhrzeit (teilweise fest definiert, teilweise vom Anwender konfigurierbar, welche Datumswerte eine Uhrzeit haben können und welche nicht). Bei denen, die keine Uhrzeit haben, wird diese auf 00:00 Uhr gesetzt und auch so in der DB gespeichert.

Die Anwendung wird von Kunden nicht nur unter deutscher Zeitzone betrieben, aber bisher war es wohl anscheinend so, dass es immer Zeitzonen waren, die zeitlich vor der deutschen liegen (also Richtung Westen), da fällt das Problem nicht auf.
Ein Anwender in Lissabon (Portugal ist eine Stunde zurück, die arbeiten auf einem Server mit deutscher Zeitzone, auf die auch deutsche Anwender mit deutscher Zeitzone zugreifen) bekommt jetzt natürlich alle Datumswerte ohne Uhrzeit (00:00 Uhr) falsch angezeigt, nämlich einen Tag davor mit (impliziter, nicht sichtbaren Uhrzeit 23:00), da durch die Zeitzonen-Konvertierung eine Stunde abgezogen wird. Das ist natürlich sehr ungünstig und hier soll eigentlich keine Konvertierung stattfinden.
Bsp:
In DB und bei Anwendern mit deutscher Zeitzone steht "07.07.2022" (nicht sichtbare Uhrzeit 00:00), in Portugal steht "06.07.2022" (nicht sichtbare Uhrzeit 23:00)

Was mich am meisten irritiert.... dieses Problem ist ja nicht neu, das müssen doch viele haben. Wie kann ich das lösen, dass hier keine Konvertierung stattfindet? Oder gibt es eine Möglichkeit wieder zu dem ursprünglichen Datum zurückzukommen, dass man es zumindest korrekt anzeigt auf der Oberfläche. Wir verwenden für Datumswerte durchgängig java.sql.Timestamp. Habe experimentiert mit java.time.LocalDate, aber das bringt mich auch nicht weiter. Das was ich aus dem Server auf den Client bekomme ist nun mal ein Timestamp und das hat nun mal schon die falschen Daten.

Ein möglicher Ansatz wäre evtl. die Uhrzeit nicht auf 00:00 Uhr zu setzen, sondern auf 12:00 Uhr, dann müsste zwischen Client-Zeitzone und Server-Zeitzone schon mehr als 12h Unterschied sein, damit man wieder in den Fehler läuft, aber das ist ja trotzdem keine 100%-Lösung.

Falls einer von Euch eine praktikablere Lösung hätte, wäre ich für einen Post hier sehr dankbar.

VG
Tom
 

Jw456

Top Contributor
Ich hätte vielleicht nicht 00:00: Uhr für Datum ohne Zeit benutzt, sondern 12:00 Uhr

auch die Zeitzone mit gespeichert und ausgewertet.
 

Robert Zenz

Top Contributor
Das Problem hier ist, wie du ja richtig erkannt hast, dass "2022-01-01 00:00:00" ein bestimmter Zeitpunkt im Zeitstrahl ist (siehe java.time.Instant). Ein reines Datum "2022-01-01" hingegen ist dies eigentlich nicht, weil die Angabe einer Uhrzeit dafuer notwendig ist (wenn auch implizit immer "00:00:00" angenommen wird). Jetzt habt ihr genau dieses Problem, ihr habt nicht ein "absolutes" Datum, sondern den "relativen" Zeitpunkt "2022-01-01 00:00:00" zusammen mit einer Zeitzone in der Datenbank gespeichert (oder der Server konvertiert diese auf seine Zeitzone, was viel gruseliger waere).

Ich sehe da jetzt gerade nur zwei moegliche Loesungen: Die erste waere, ihr fuehrt eine eigene Spalte fuer "einfache" Daten ein, dann koennt ihr, idealerweise, einmal java.time.LocalDate und einmal java.time.OffsetDateTime aus der Datenbank holen.

Oder, zweite Moeglichkeit, ihr holt euch immer OffsetDateTime aus der Datenbank, prueft dann ob die Uhrzeit Mitternacht ist und reduziert dieses dann auf LocalDate ohne die Zeitzone zu beruecksichtigen.
 

KonradN

Super-Moderator
Mitarbeiter
Mich würde ein mal interessieren, was genau Du machst. Welche Klassen verwendest Du? Welche Datenbank?

Es gibt gewisse Anpassungen. Oracle Datenbank speichert ein Date in UTC, d.h. der Client bekommt das ohne Timezone in der lokalen Zeit.

Man kann da also im Detail durchaus drauf schauen um das dann zu lösen. Evtl. hilft dieser SO Thread etwas:

Die neue API mit Instant wäre ggf. eine mögliche Lösung denke ich.
 

TomH

Mitglied
Hallo zusammen,
vielen Dank für die vielen Anregungen.

Bevor ich euch noch weiter löchere, schaue ich mir erst mal die "neue" Time-API noch genauer an. Die habe ich bisher noch nie verwendet.

VG
Tom
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Datum vergleichen - ohne Hilfsmittel Allgemeine Java-Themen 8
Z Datum ohne Format-Kenntnisse parsen Allgemeine Java-Themen 5
S Build-Zeitpunt (Datum und Uhrzeit) irgendwie während der Laufzeit zugänglich machen..? 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
MiMa Wie sollte am besten ein Datum gespeichert werden? 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
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
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
D Email versand bei einem festgelegten Datum Allgemeine Java-Themen 11
T Mit Datum und Zeit rechnen Allgemeine Java-Themen 8
D Datum korrekt erkennen Allgemeine Java-Themen 27
M Datum einlesen aus jTextField Allgemeine Java-Themen 2
M Zukünftiges Datum Allgemeine Java-Themen 3
G Listener auf aktuelles Datum / Uhrzeit Allgemeine Java-Themen 2
G JDK 1.5 und das Datum Allgemeine Java-Themen 7
V Datum parsen Allgemeine Java-Themen 6
V Datei kopieren und Datum erhalten Allgemeine Java-Themen 2
M Datei Handling mit Datum Allgemeine Java-Themen 2
M Datum in Tabelle formatiert ausgeben Allgemeine Java-Themen 3
S Datum einer Datei online? Allgemeine Java-Themen 6
G Anzahl an Tagen auf Datum addieren Allgemeine Java-Themen 4
G Datum im Format yyyy-mm-dd erstellen Allgemeine Java-Themen 1
P Datum in einer DateComboBox setzen Allgemeine Java-Themen 7
MQue Datum in ComboBox setzen Allgemeine Java-Themen 9
J [Aenderungszeit Datei] nur Datum vergleichen Allgemeine Java-Themen 3
G Anzahl Tage in Datum umwandeln Allgemeine Java-Themen 13
M Datum nicht richtig geprüft, warum? Allgemeine Java-Themen 9
L datum nach dem kopiervorgang neu setzen? Allgemeine Java-Themen 2
R Datum in *.txt suchen und ersetzen Allgemeine Java-Themen 2
H Ein zufälliges Datum innerhalb eines Intervalles erzeugen Allgemeine Java-Themen 3
S POI Datum Allgemeine Java-Themen 2
G Datum einer Datei Allgemeine Java-Themen 8
J Datum auf Gültigkeit überprüfen Allgemeine Java-Themen 4
TheJavaKid Datum -> long Allgemeine Java-Themen 9
M Führende Null in einem Datum Allgemeine Java-Themen 3
C Datum-/Zeitdifferenz Allgemeine Java-Themen 5
F Datum gültig ? Allgemeine Java-Themen 9
G Datum konvertieren Allgemeine Java-Themen 14
G mysql datum umwandeln mittels jsp Allgemeine Java-Themen 10
F Datum mit anzahl tagen berechnen Allgemeine Java-Themen 3
F Datum in GregorianCalendar Allgemeine Java-Themen 3
G Datum Allgemeine Java-Themen 4
T Datum testen und Einsetzten Allgemeine Java-Themen 5
K Datum in ein anderes Format bringen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben