Ja. Es gibt Anwendungsfälle für TIMESTAMP WITHOUT TIME ZONE
.
- In gängigen Geschäftsanwendungen wird dieser Typ nur für Folgendes verwendet:
- Buchung zukünftiger Termine
- Darstellung der gleichen Tageszeit in verschiedenen Zeitzonen, z. B. am 23. Mittag in Tokio und in Paris (zwei verschiedene Momente im Abstand, gleiche Tageszeit)
- Verwenden Sie zum Verfolgen von Momenten bestimmte Punkte auf der Zeitachse immer
TIMESTAMP WITH TIME ZONE
und nicht WITHOUT
.
TIMESTAMP WITHOUT TIME ZONE
Werte sind kein Punkt auf der Zeitachse, keine tatsächlichen Momente. Sie geben eine ungefähre Vorstellung von potenziellen Momenten und möglichen Punkten auf der Zeitachse in einem Bereich von etwa 26 bis 27 Stunden (dem Bereich der Zeitzonen rund um den Globus). Sie haben keine wirkliche Bedeutung, bis Sie eine Zeitzone oder einen Versatz von UTC anwenden .
ZB: Weihnachten
Angenommen, Sie müssen den Beginn von Feiertagen / Feiertagen aufzeichnen.
Table: holiday_
Column: year_ Type: SMALLINT
Column: description_ Type: VARCHAR
Column: start_ Type: TIMESTAMP WITHOUT TIME ZONE
Um zu erfassen, dass Weihnachten am 25. Dezember dieses Jahres nach Mitternacht beginnt, müssen wir 2016-12-25 00:00:00
keine Zeitzone angeben . Früh am Tag des Weihnachtsmanns besucht er kurz nach Mitternacht Auckland, Neuseeland, da dies eine der frühesten Mitternächte der Welt ist. Dann arbeitet er sich nach Westen vor, bis die nächste Mitternacht die Philippinen erreicht. Dann bewegen sich die Rentiere in westlicher Richtung und erreichen Indien um Mitternacht, was einige Stunden nach Mitternacht in Auckland passiert. Viel später ist noch Mitternacht in Paris FR und noch später Mitternacht in Montreal CA. Alle diese Besuche des Weihnachtsmanns finden zu unterschiedlichen Zeitpunkten statt , und doch geschahen alle kurz nach Mitternacht, je nach Lokalität um Mitternacht.
Das Aufnehmen 2016-12-25 00:00:00
ohne Zeitzone zu Beginn von Weihnachten ist also informativ und legitim, aber nur vage. Bis Sie "Weihnachten in Auckland" oder "Weihnachten in Montréal" sagen, haben wir keinen bestimmten Zeitpunkt. Wenn Sie bei jedem Aufsetzen des Schlittens den tatsächlichen Moment aufzeichnen, verwenden Sie TIMESTAMP WITH TIME ZONE
statt des WITHOUT
Typs.
Ähnlich wie Weihnachten ist Silvester. Wenn der Times Square Ball in New York fällt , kühlen die Leute in Seattle immer noch ihren Champagner und bereiten ihre Partyhörner vor . Dennoch würden wir die Idee des Neujahrsmoments wie 2017-01-01 00:00:00
in a TIMESTAMP WITHOUT TIME ZONE
. Wenn wir dagegen aufzeichnen möchten, wann der Ball in New York gefallen ist oder wann die Leute in Seattle ihre Hörner geblasen haben, würden wir stattdessen diese tatsächlichen Momente drei Stunden hintereinander aufzeichnen TIMESTAMP WITH TIME ZONE
(nicht WITHOUT
).
Beispiel: Fabrikschichten
Ein anderes Beispiel könnte das Aufzeichnen einer Richtlinie sein, bei der die Uhrzeit an verschiedenen Orten angezeigt wird. Sagen wir, wir haben Fabriken in Detroit, Düsseldorf und Delhi. Wenn wir sagen, dass in allen drei Fabriken die erste Schicht um 6 Uhr morgens mit einer Mittagspause um 11:30 Uhr beginnt, könnte dies als ein TIMESTAMP WITHOUT TIME ZONE
. Auch diese Informationen sind auf vage Weise nützlich, geben jedoch keinen bestimmten Zeitpunkt an, bis wir eine Zeitzone anwenden. Im Osten bricht früher ein neuer Tag an. Das Werk in Delhi wird also um 6 Uhr morgens als erstes eröffnet. Stunden später beginnt das Düsseldorfer Werk um 6 Uhr morgens mit der Arbeit. Die Fabrik in Detroit wird jedoch erst sechs Stunden später, wenn 6 Uhr morgens, eröffnet.
Vergleichen Sie diese Idee (wann die Fabrikschicht im Allgemeinen beginnt) mit der historischen Tatsache, wann jeder Fabrikarbeiter eingewechselt ist, um seine Schicht an einem bestimmten Tag zu beginnen. Das Eintakten ist ein echter Moment, ein tatsächlicher Punkt auf der Timeline. Wir würden das also in einer Spalte vom Typ TIMESTAMP WITH TIME ZONE
und nicht vom WITHOUT
Typ aufzeichnen .
Also, ja, es gibt legitime Anwendungsfälle für TIMESTAMP WITHOUT TIME ZONE
. Nach meiner Erfahrung mit Geschäftsanwendungen sind sie jedoch relativ selten. Im Geschäftsleben kümmern wir uns in der Regel um die tatsächlichen Momente: Wann ist die Rechnung tatsächlich angekommen, wann tritt genau dieser Vertrag in Kraft, zu welchem Zeitpunkt wurde die Banküberweisung ausgeführt. In solchen Situationen wollen wir den TIMESTAMP WITH TIME ZONE
Typ.
Weitere Informationen finden Sie unter Meine Antwort auf die ähnliche Frage: Soll ich UTC-Zeitstempel oder Ortszeiten für Schichten speichern?
Postgres
Beachten Sie, dass Postgres die beim Einfügen eines Zeitstempels angegebenen Zeitzoneninformationen niemals speichert.
TIMESTAMP WITH TIME ZONE
- Jede angegebene Zeitzone oder jeder Offset in den Eingabedaten wird verwendet, um den Wert auf UTC einzustellen und zu speichern. Die übergebenen Zonen- / Versatzinformationen werden dann verworfen. Denken Sie an
TIMESTAMP WITH TIME ZONE
als TIMESTAMP WITH RESPECT FOR TIME ZONE
.
- Bei einer Eingabe von 12:00 Uhr am 7. März dieses Jahres in Indien wird die Uhrzeit durch Subtraktion von fünfeinhalb Stunden auf UTC umgestellt: 6:30 Uhr.
TIMESTAMP WITHOUT TIME ZONE
- Alle angegebenen Zeitzonen oder Offsets, die in den Eingabedaten enthalten sind, werden vollständig ignoriert.
- Eine Eingabe von 12:00 Uhr am 7. März dieses Jahres in Indien wird ohne Anpassung als 12:00 Uhr am 7. März dieses Jahres aufgezeichnet.
Der SQL-Standard geht kaum auf Probleme mit Datums- und Uhrzeitdatentypen und -verhalten ein. So Datenbank variieren weit in den Umgang mit Datum-Zeit.