De juiste manier is om time with time zone
niet te gebruiken (let op de spatie tussen time
en zone
) helemaal niet, omdat het door het ontwerp is gebroken. Het is in de SQL-standaard, dus Postgres ondersteunt het type - maar adviseert niet om het te gebruiken. Meer in dit gerelateerde antwoord:
Aangezien je problemen hebt met DST
, timetz
(korte naam) is een bijzonder slechte keuze. Het is slecht uitgerust om met DST om te gaan. Het is onmogelijk om te zeggen of 8:00:00
is in winter- of zomertijd.
Gebruik timestamp with time zone
(timstamptz
)
in plaats van. U kunt het datumgedeelte altijd weggooien. Gebruik gewoon start_time::time
om de lokale . te krijgen tijd van een timestamptz
. Of gebruik AT TIME ZONE
om naar uw tijdzone te transponeren.
Over het algemeen, om automatisch rekening te houden met de zomertijd , gebruik een tijdzonenaam in plaats van een tijdzone-afkorting. Meer uitleg in deze gerelateerde vraag &antwoord:
In jouw specifieke geval zou je waarschijnlijk America/Los_Angeles
. kunnen gebruiken (voorbeeld met 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')
Ik vond dit door te controleren:
SELECT * FROM pg_timezone_names
WHERE utc_offset = '-07:00'
AND is_dst;
Basisprincipes over het omgaan met tijdzones: