Sfortunatamente PostgreSQL non offre un tipo di dati di fuso orario, quindi probabilmente dovresti usare text
.
interval
a prima vista sembra un'opzione logica e lo è appropriato per alcuni usi. Tuttavia, non prende in considerazione l'ora legale, né considera il fatto che diverse regioni nella stessa differenza UTC hanno regole DST diverse.
Non esiste una mappatura 1:1 dall'offset UTC al fuso orario.
Ad esempio, il fuso orario di Australia/Sydney
(Nuovo Galles del Sud) è UTC+10
(EST
), o UTC+11
(EDT
) durante l'ora legale. Sì, è lo stesso acronimo EST
che gli USA utilizzano; gli acronimi dei fusi orari non sono univoci nel database tzdata, motivo per cui Pg ha le timezone_abbreviations
ambientazione. Peggio ancora, Brisbane (Queensland) è quasi alla stessa longditudine ed è in UTC+10 EST
... ma non ha l'ora legale, quindi a volte è a un -1
spostato nel Nuovo Galles del Sud durante l'ora legale del NSW.
(Aggiorna :Più recentemente l'Australia ha adottato un A
prefisso, quindi utilizza AEST
come il suo acronimo TZ degli stati orientali, ma EST
e WST
rimangono di uso comune).
Confonde molto?
Se tutto ciò che devi memorizzare è un offset UTC quindi un interval
è appropriato. Se desideri memorizzare un fuso orario , salvalo come text
. È difficile convalidare e convertire in un fuso orario sfalsato al momento, ma almeno fa fronte all'ora legale.