LocalDateTime zu ZonedDateTime

Ich habe Java 8 Spring-web-app wird die Unterstützung mehrerer Regionen. Ich brauche, um Kalender events für Kunden vor Ort. So können sagen, meine web-und Postgres-server gehostet wird, ist in der Zeitzone MST (aber ich denke, es könnte überall sein, wenn wir gehen, cloud). Aber der Kunde ist in der EST. So, nach einigen best practices, die ich gelesen, ich dachte, ich würde store stammen alle Zeiten in UTC-format. Alle Datum-Zeit-Felder in der Datenbank deklariert sind, die als TIMESTAMP.

Also hier ist, wie ich eine LocalDateTime und konvertieren von UTC:

ZonedDateTime startZonedDT = ZonedDateTime.ofLocal(dto.getStartDateTime(), ZoneOffset.UTC, null);
//appointment startDateTime is a LocalDateTime
appointment.setStartDateTime( startZonedDT.toLocalDateTime() );

Nun , zum Beispiel, wenn eine Suche für ein Datum kommt, muss ich konvertieren vom angeforderten Datum, Uhrzeit in UTC, die Ergebnisse zu erhalten und zu konvertieren, um die Benutzer-Zeitzone (gespeichert in der db):

ZoneId  userTimeZone = ZoneId.of(timeZone.getID());
ZonedDateTime startZonedDT = ZonedDateTime.ofLocal(appointment.getStartDateTime(), userTimeZone, null);
dto.setStartDateTime( startZonedDT.toLocalDateTime() );

Nun, ich bin nicht sicher, ob dies der richtige Ansatz. Ich Frage mich auch, wenn ich da bin, geht aus LocalDateTime zu ZonedDateTime und Umgekehrt, ich könnte Sie verlieren timezone info.

Hier bin ich zu sehen, und es scheint nicht richtig zu mir. Wenn ich die LocalDateTime von der Benutzeroberfläche aus, bekomme ich diese:

2016-04-04T08:00

Den ZonedDateTime =

dateTime=2016-04-04T08:00
offset="Z"
zone="Z"

Und wenn ich dann zuweisen, konvertiert werden, Wert zu meinem Termin LocalDateTime ich store:

2016-04-04T08:00

Fühle ich mich wie, weil ich bin die Speicherung in LocalDateTime ich verliere die Zeitzone, die ich umgewandelt in ZonedDateTime.

Sollte ich meine Person (Termin) verwenden ZonedDateTime statt LocalDateTime, so dass Postgres nicht Locker, dass Informationen?

---------------- Bearbeiten ----------------

Nach Basils ausgezeichnete Antwort, ich merkte, dass ich den Luxus haben, nicht die Pflege der Benutzer-Zeitzone - alle Termine sind auf einen bestimmten Ort, damit ich speichern kann, stammen alle Zeiten als UTC und dann konvertieren Sie Sie in das Standort-Zeitzone abgerufen werden. Ich habe die folgenden followup Frage

  • Ihre app muss timezone Informationen?
  • Bezüglich Ihrer "Bearbeiten" - Abschnitt, wissen, dass Politiker, die Liebe neu zu definieren, Zeitzonen-offsets, Daylight Saving Time (DST), etc. So gehen Sie nie zu weit in die Zukunft mit UTC-Werten. Wenn du meinst, dental-hygiene-Termine weit im Voraus, ex. "3 Uhr am 5. Dezember 2017 später in diesem Jahr", dann können Sie tatsächlich verwenden möchten LocalDateTime zu speichern, dass Tat. Der Absicht, es ist 3 Uhr, aber die Politiker haben neu definiert, der moment, indem dann. Für einen Zeitplan, die Sie möglicherweise vorübergehend gelten Zeit-zone, um das Potenzial LocalDateTime zu generieren, die einen tatsächlichen moment als ein ZonedDateTime/Instant.
InformationsquelleAutor sonoerin | 2016-04-05
Schreibe einen Kommentar