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: