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

Inserir hora com horário de verão do fuso horário


O adequado maneira é não usar time with time zone (observe o espaço entre time e zone ), uma vez que está quebrado por design. Está no padrão SQL, então o Postgres suporta o tipo - mas aconselha não para usá-lo. Mais nesta resposta relacionada:

Como você está tendo problemas com o DST , timetz (nome curto) é uma escolha particularmente ruim. Está mal equipado para lidar com o horário de verão. É impossível saber se 8:00:00 é no inverno ou no verão.

Use timestamp with time zone (timstamptz ) em vez de. Você sempre pode descartar a parte da data. Basta usar start_time::time para obter o local hora de um timestamptz . Ou use AT TIME ZONE para transpor para o seu fuso horário.

Geralmente, para considerar o horário de verão automaticamente , use um nome de fuso horário em vez de uma abreviação de fuso horário. Mais explicações nesta pergunta e resposta relacionadas:

No seu caso particular, você provavelmente poderia usar America/Los_Angeles (exemplo com timestamptz ):
INSERT INTO mytable(start_time, end_time)
VALUES
   ('1970-01-01 08:00:00 America/Los_Angeles'
  , '1970-01-01 18:00:00 America/Los_Angeles')

Encontrei isso verificando:
SELECT * FROM pg_timezone_names 
WHERE  utc_offset = '-07:00'
AND    is_dst;

Noções básicas sobre o manuseio de fuso horário: