Sì. Ci sono casi d'uso per TIMESTAMP WITHOUT TIME ZONE
.
- Nelle comuni app aziendali questo tipo verrebbe utilizzato solo per:
- Prenotazione appuntamenti futuri
- Rappresenta la stessa ora del giorno in diversi fusi orari, come il mezzogiorno del 23 a Tokyo e a Parigi (due diversi momenti a ore, lo stesso giorno del giorno)
- Per il monitoraggio momenti, punti specifici sulla timeline, utilizzare sempre
TIMESTAMP WITH TIME ZONE
, non è WITHOUT
.
TIMESTAMP WITHOUT TIME ZONE
i valori non sono un punto sulla sequenza temporale, non momenti reali. Rappresentano un'idea approssimativa di potenziali momenti, possibili punti della sequenza temporale in un intervallo di circa 26-27 ore (l'intervallo di fusi orari in tutto il mondo). Non hanno alcun significato reale fino a quando non si applica un fuso orario o un offset da UTC .
Es: Natale
Ad esempio, supponiamo che sia necessario registrare l'inizio delle festività / dei giorni sacri.
Table: holiday_
Column: year_ Type: SMALLINT
Column: description_ Type: VARCHAR
Column: start_ Type: TIMESTAMP WITHOUT TIME ZONE
Per registrare il fatto che il Natale inizia dopo la mezzanotte del 25 dicembre di quest'anno, dobbiamo dire 2016-12-25 00:00:00
senza alcun fuso orario. All'inizio del giorno di Babbo Natale visita Auckland, in Nuova Zelanda, subito dopo mezzanotte, poiché questa è una delle prime notti di mezzanotte al mondo. Quindi si dirige verso ovest, come accade la mezzanotte successiva, raggiungendo presto le Filippine. Quindi le renne proseguono in direzione ovest, raggiungendo l'India alla sua mezzanotte che si verifica diverse ore dopo quella mezzanotte di Auckland. Molto più tardi è ancora mezzanotte a Parigi, Francia, e ancora più tardi a Montreal, in California. Tutte queste visite di Babbo Natale avvengono in momenti diversi è il momento , eppure sono avvenute poco dopo la mezzanotte, per la mezzanotte di ogni località.
Quindi registrare 2016-12-25 00:00:00
senza alcun fuso orario come l'inizio del Natale è informativo e legittimo, ma solo vagamente. Finché non dici "Natale ad Auckland" o "Natale a Montréal", non abbiamo un momento preciso nel tempo. Se stai registrando il momento effettivo ogni volta che la slitta è atterrata, useresti TIMESTAMP WITH TIME ZONE
piuttosto che il WITHOUT
tipo.
Simile al Natale è la vigilia di Capodanno. Quando la Times Square Ball scende a New York , la gente a Seattle sta ancora raffreddando il suo champagne e sta preparando le corna della sua festa . Eppure registreremmo l' idea del momento di Capodanno come 2017-01-01 00:00:00
in a TIMESTAMP WITHOUT TIME ZONE
. Al contrario, se vogliamo registrare quando la palla è caduta a New York, o quando la gente di Seattle ha suonato le corna, avremmo invece usato TIMESTAMP WITH TIME ZONE
(non WITHOUT
) per registrare quei momenti reali, a tre ore l'una dall'altra.
Es .: turni di fabbrica
Un altro esempio potrebbe essere la registrazione di una politica che prevede il tempo dell'orologio a muro in varie posizioni. Supponiamo di avere fabbriche a Detroit, Düsseldorf e Delhi. Se diciamo che in tutte e tre le fabbriche il primo turno inizia alle 6:00 con una pausa pranzo alle 11:30, ciò potrebbe essere registrato come TIMESTAMP WITHOUT TIME ZONE
. Ancora una volta, queste informazioni sono utili in modo vago ma non indicano un momento specifico fino a quando non applicheremo un fuso orario. Un nuovo giorno sorge prima ad est. Quindi la fabbrica di Delhi sarà la prima ad aprire alle sue 6 del mattino. Ore dopo, la fabbrica di Düsseldorf inizia a lavorare alle 6:00. Ma la fabbrica di Detroit non aprirà fino a quando non saranno trascorse altre sei ore, quando saranno le 6 del mattino.
Contrasta questa idea (di quando generalmente inizia il turno di fabbrica) con il fatto storico di quando ogni operaio di fabbrica ha fatto il suo turno per iniziare il proprio turno in un particolare giorno. L'orologio è un vero momento, un vero punto nella sequenza temporale. Quindi lo registreremmo in una colonna di tipo TIMESTAMP WITH TIME ZONE
anziché nel WITHOUT
tipo.
Quindi, sì, ci sono casi d'uso legittimi per TIMESTAMP WITHOUT TIME ZONE
. Ma nella mia esperienza con le app aziendali, sono relativamente rare. Negli affari, tendiamo a preoccuparci dei momenti concreti: quando è arrivata effettivamente la fattura, quando è entrato in vigore esattamente quel contratto, in quale momento è stata eseguita la transazione bancaria. Quindi in tali situazioni comuni, vogliamo il TIMESTAMP WITH TIME ZONE
tipo.
Per ulteriori discussioni, vedere la mia risposta alla domanda simile, Devo memorizzare i timestamp UTC o l'ora locale per i turni
Postgres
Nota che Postgres non salva specificamente le informazioni sul fuso orario specificate quando si inserisce un timestamp.
TIMESTAMP WITH TIME ZONE
- Qualsiasi fuso orario o offset specificato incluso nei dati di input viene utilizzato per regolare il valore su UTC e memorizzato. Le informazioni sulla zona / offset passate vengono quindi eliminate. Pensa a
TIMESTAMP WITH TIME ZONE
come TIMESTAMP WITH RESPECT FOR TIME ZONE
.
- Un input di 12:00 mezzogiorno del 7 marzo di quest'anno in India avrà la sua ora del giorno regolata su UTC sottraendo cinque ore e mezza: 6:30 AM.
TIMESTAMP WITHOUT TIME ZONE
- Qualsiasi fuso orario o offset specificato incluso nei dati di input viene completamente ignorato.
- Un input di 12:00 mezzogiorno del 7 marzo di quest'anno in India è registrato come 12:00 il 7 marzo di quest'anno senza aggiustamento.
Lo standard SQL tocca a malapena problemi di tipo e comportamento dei dati data-ora. Quindi il database varia notevolmente nella gestione della data e dell'ora.