PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O que é um tipo de dados apropriado para armazenar um fuso horário?


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.