2010-12-08 6 views
3

Ich entschuldige mich für die sehr grundsätzliche Frage, ich glaube, ich weiß die Antwort würde aber überprüfen, wie:Anforderung zur Überprüfung - Wie Datenbanken und Java Zeitzonen speichern und verarbeiten?

Wann Zeitzonen beziehe und wie sie in der Regel in einer Datenbank und in einem java.util.Date gespeichert:

  • wenn ein Datumsfeld in einer Datenbank zu speichern, ist es Zeitzone Agnostiker (zB immer in UTC gespeichert)
  • wenn ein Java-Datum mit dem Date-Objekt ist es auch Zeitzone Agnostiker
  • Zeitzone nur depeneded wird, wenn Formatieren und Parsen von Daten (DB und Java)
  • Java Bei der Verwendung von - wird es die JVM user.timezone zu Format verwenden/parsen Daten
  • Wenn Java unter Windows verwenden - Java automatisch
  • Die Datenbank Zeitzone dies von den regionalen Einstellungen nehmen (und es ist Zeitzone der Maschine) ist irrelevant für die Java-JDBC-Client
  • die Zeitzone des Datenbank-Server ist für die direkte SQL-Parsing und Formatierung

Meine Fragen nur relevant sind:

  1. Sind alle obigen Annahmen richtig? einige sind? alle incorrect?
  2. Gibt es eine Referenz/offizielle Quelle, die dies "offiziell" bestätigt?

Antwort

1

Die Annahme sind meistens für Java richtig. Sie sind nicht unbedingt korrekt für Datenbanken, da es Variationen gibt.

Java verarbeitet Zeitzonen mit Kalenderobjekten. Das Objekt java.util.Date enthält immer den UTC-Wert.

Datenbanken speichern und geben Daten und Zeitstempel (mit Stunden, Minuten usw.) normalerweise so zurück, wie sie geschrieben werden, unabhängig vom internen Format, das vom Speicher verwendet wird. Wenn Sie 2010-12-25 speichern, rufen Sie unabhängig von der Zeitzone der Clients oder des Servers den gleichen Wert ab.

Einige Datenbanken haben den Datentyp TIMESTAMP WITH TIMEZONE, der sowohl den Zeitstempel als auch die Zeitzone getrennt speichert.

Datums- und Zeitstempel werden zwischen Java und Datenbank konvertiert, normalerweise so, dass die verwendeten Unterklassen von java.util.Date in der Zeitzone des JDBC-Clients interpretiert werden.

+0

So hatte ich Recht, Zeitzone ist für die Formatierung, und alle Daten speichern als "UTC" entweder per Definition oder Konvention ... ist das richtig? –

+0

In Java sind sie alle UTC. In Datenbanksystemen variiert die Speichermethode, aber in der Regel wird etwas wie 2010-12-25 12:30:15 unabhängig von den Zeitzonen genau so gespeichert und zurückgesendet, wie es geschrieben wurde. Sie können mit HSQLDB 2.0.1 versuchen, die TIMESTAMP WITH TIME ZONE sowie ohne Zeitzone unterstützt und die Ergebnisse sehen. – fredt

Verwandte Themen