sql >> Base de Datos >  >> RDS >> PostgreSQL

Insertar hora con horario de verano de zona horaria

El adecuado la forma es no usar time with time zone (tenga en cuenta el espacio entre time y zone ) en absoluto, ya que está roto por diseño. Está en el estándar SQL, por lo que Postgres admite el tipo, pero recomienda no para usarlo Más en esta respuesta relacionada:

Dado que tiene problemas con DST , timetz (nombre corto) es una elección particularmente mala. Está mal equipado para lidiar con el horario de verano. Es imposible saber si 8:00:00 es en horario de invierno o verano.

Use timestamp with time zone (timstamptz ) en cambio. Siempre puede descartar la parte de la fecha. Simplemente use start_time::time para obtener el local tiempo de un timestamptz . O use AT TIME ZONE para transponer a su zona horaria.

Por lo general, para tener en cuenta el horario de verano automáticamente , usa un nombre de zona horaria en lugar de una abreviatura de zona horaria. Más explicaciones en esta pregunta y respuesta relacionadas:

En tu caso particular, probablemente podrías usar America/Los_Angeles (ejemplo con 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')

Encontré esto comprobando:

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

Conceptos básicos sobre el manejo de la zona horaria: