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: