správné způsob je nepoužívat time with time zone (všimněte si mezery mezi time a zone ) vůbec, protože je rozbitý designem. Je ve standardu SQL, takže Postgres typ podporuje - ale doporučuje ne používat to. Více v této související odpovědi:
Protože máte problémy s DST
, timetz (krátké jméno) je obzvláště špatná volba. Je špatně vybaven pro řešení letního času. Není možné určit, zda 8:00:00 je v zimním nebo letním čase.
Použijte timestamp with time zone (timstamptz )
namísto. Část s datem můžete vždy zahodit. Jednoduše použijte start_time::time získat místní čas z timestamptz . Nebo použijte AT TIME ZONE
transponovat do vašeho časového pásma.
Obecně platí, že automatické zohlednění letního času , použijte název časového pásma místo zkratky časového pásma. Další vysvětlení v této související otázce a odpovědi:
Ve vašem konkrétním případě byste pravděpodobně mohli použít America/Los_Angeles (příklad s 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')
Našel jsem to kontrolou:
SELECT * FROM pg_timezone_names
WHERE utc_offset = '-07:00'
AND is_dst;
Základy zpracování časových pásem: