Oui. Il existe des cas d'utilisation pour TIMESTAMP WITHOUT TIME ZONE
.
- Dans les applications d'entreprise courantes, ce type ne serait utilisé que pour:
- Réservation de rendez-vous futurs
- Représenter la même heure du jour sur plusieurs fuseaux horaires, comme le 23 à midi à Tokyo et à Paris (deux moments différents à une heure d'intervalle, même heure du jour)
- Pour les moments de suivi, utilisez des points spécifiques sur la timeline
TIMESTAMP WITH TIME ZONE
, pas WITHOUT
.
TIMESTAMP WITHOUT TIME ZONE
les valeurs ne sont pas un point sur la timeline, pas des moments réels. Ils représentent une idée approximative des moments potentiels , des points possibles sur la timeline sur une plage d’environ 26 à 27 heures (la plage des fuseaux horaires dans le monde). Ils n'ont aucune signification réelle jusqu'à ce que vous appliquiez un fuseau horaire ou un décalage par rapport à UTC .
Ex: Noël
Par exemple, supposons que vous deviez enregistrer le début des vacances / jours saints.
Table: holiday_
Column: year_ Type: SMALLINT
Column: description_ Type: VARCHAR
Column: start_ Type: TIMESTAMP WITHOUT TIME ZONE
Pour enregistrer le fait que Noël commence après minuit le 25 décembre de cette année, nous devons dire 2016-12-25 00:00:00
sans fuseau horaire. Au début de la journée du père Noël, il se rend à Auckland en Nouvelle-Zélande juste après minuit, car il s'agit de l'un des tout premiers mid-night du monde. Ensuite, il se dirige vers l’Ouest, comme à l’heure suivante, pour atteindre bientôt les Philippines. Ensuite, les rennes se dirigent vers l’ouest pour atteindre l’Inde à minuit, plusieurs heures après celle d’Auckland. Beaucoup plus tard, il est toujours minuit à Paris FR et encore plus tard minuit à Montréal, en Californie. Toutes ces visites du père Noël ont lieu à des moments différents , mais toutes se sont déroulées peu de temps après minuit, par minuit propre à chaque localité.
Donc, enregistrer 2016-12-25 00:00:00
sans le fuseau horaire que le début de Noël est informatif et légitime, mais seulement vaguement. Jusqu'à ce que vous disiez «Noël à Auckland» ou «Noël à Montréal», nous n'avons pas de moment précis dans le temps. Si vous enregistrez le moment réel à chaque fois que le traîneau touche le sol, vous utiliserez TIMESTAMP WITH TIME ZONE
plutôt que le WITHOUT
type.
Semblable à Noël, c'est le réveillon du nouvel an. Lorsque le Times Square Ball tombe à New York , les habitants de Seattle gardent toujours leur champagne au froid et préparent leurs cornes de fête . Pourtant, nous enregistrons l' idée du moment du Nouvel An comme 2017-01-01 00:00:00
dans un TIMESTAMP WITHOUT TIME ZONE
. En revanche, si nous voulons enregistrer quand le ballon est tombé à New York ou quand les habitants de Seattle s’essoufflent, nous utiliserons TIMESTAMP WITH TIME ZONE
(non WITHOUT
) pour enregistrer ces moments réels, à trois heures d’écart l'un de l'autre.
Ex: déplacements d'usine
Un autre exemple pourrait consister à enregistrer une politique qui implique une heure fixe sur différents emplacements. Supposons que nous ayons des usines à Détroit, Düsseldorf et Delhi. Si nous disons que dans les trois usines, le premier quart de travail commence à 6 heures du matin et la pause du déjeuner à 11h30, cela pourrait être enregistré comme TIMESTAMP WITHOUT TIME ZONE
. Encore une fois, cette information est utile de manière vague mais n'indique pas un moment précis avant l'application d'un fuseau horaire. Un nouveau jour se lève plus tôt dans l'est. L’usine de Delhi sera donc la première à ouvrir à 6 heures du matin. Quelques heures plus tard, l’usine de Düsseldorf commence à travailler à 6 heures du matin. Mais l’usine de Detroit n’ouvrira réellement que six heures plus tard, au plus tard à 6 heures.
Comparez cette idée (du début de l'équipe d'usine en général) au fait historique de savoir quand chaque ouvrier d'usine a commencé à effectuer son service un jour donné. Le chronométrage est un moment réel, un point réel sur la timeline. Nous enregistrons donc cela dans une colonne de type TIMESTAMP WITH TIME ZONE
plutôt que de WITHOUT
type.
Donc, oui, il existe des cas d'utilisation légitimes pour TIMESTAMP WITHOUT TIME ZONE
. Mais d'après mon expérience avec les applications professionnelles, elles sont relativement rares. En affaires, nous avons tendance à nous soucier des moments réels: quand la facture est-elle réellement arrivée, quand exactement ce contrat a-t-il pris effet, à quel moment cette transaction bancaire a-t-elle été exécutée? Donc, dans de telles situations courantes, nous voulons le TIMESTAMP WITH TIME ZONE
type.
Pour plus de discussion, voir ma réponse à la question similaire, devrais-je stocker des horodatages UTC ou des heures locales pour les équipes
Postgres
Notez que Postgres n'enregistre jamais spécifiquement les informations de fuseau horaire spécifiées lors de l'insertion d'un horodatage.
TIMESTAMP WITH TIME ZONE
- Tout fuseau horaire ou décalage spécifié inclus avec les données d'entrée est utilisé pour ajuster la valeur à UTC et est stocké. Les informations de zone / décalage passées sont alors ignorées. Penser
TIMESTAMP WITH TIME ZONE
à TIMESTAMP WITH RESPECT FOR TIME ZONE
.
- Le 7 mars de cette année, en Inde, l'heure du jour sera réglée sur l'heure UTC de midi à midi en soustrayant cinq heures et demie: 6h30.
TIMESTAMP WITHOUT TIME ZONE
- Tout fuseau horaire ou décalage spécifié inclus avec les données d'entrée est entièrement ignoré.
- En Inde, une entrée du 7 mars à midi au 7 mars de cette année est enregistrée, le 7 mars de cette année à midi, sans ajustement.
Le standard SQL aborde à peine les problèmes de comportement et de types de données date-heure. La base de données varie donc beaucoup dans le traitement de la date et de l’heure.