Infelizmente o PostgreSQL não oferece um tipo de dado de fuso horário, então você provavelmente deveria usar
text
. interval
parece uma opção lógica à primeira vista, e é apropriado para alguns usos. No entanto, ele não considera o horário de verão, nem considera o fato de que diferentes regiões no mesmo deslocamento UTC têm regras de horário de verão diferentes. Não há um mapeamento 1:1 do deslocamento UTC de volta para o fuso horário.
Por exemplo, o fuso horário de
Australia/Sydney
(Nova Gales do Sul) é UTC+10
(EST
), ou UTC+11
(EDT
) durante o horário de verão. Sim, é a mesma sigla EST
que os EUA usam; os acrônimos de fuso horário não são exclusivos no banco de dados tzdata, e é por isso que o Pg tem o timezone_abbreviations
contexto. Pior ainda, Brisbane (Queensland) tem quase a mesma longitude e está em UTC+10 EST
... mas não tem horário de verão, então às vezes está em um -1
deslocamento para Nova Gales do Sul durante o horário de verão de NSW. (Atualizar :Mais recentemente, a Austrália adotou um
A
prefixo, então ele usa AEST
como seu acrônimo oriental indica TZ, mas EST
e WST
permanecem em uso comum). Confuso muito?
Se tudo o que você precisa para armazenar é um deslocamento UTC então um
interval
é apropriado. Se você deseja armazenar um fuso horário , armazene-o como text
. É difícil validar e converter para um deslocamento de fuso horário no momento, mas pelo menos lida com o horário de verão.