Die richtige Weg ist, time with time zone nicht zu verwenden (beachten Sie das Leerzeichen zwischen time und zone ) überhaupt, da es absichtlich kaputt ist. Es ist im SQL-Standard, also unterstützt Postgres den Typ - rät aber nicht um es zu benutzen. Mehr in dieser verwandten Antwort:
Da Sie Probleme mit DST
haben , timetz (Kurzname) ist eine besonders schlechte Wahl. Es ist schlecht gerüstet, um mit der Sommerzeit fertig zu werden. Es ist unmöglich zu sagen, ob 8:00:00 ist in der Winter- oder Sommerzeit.
Verwenden Sie timestamp with time zone (timstamptz )
stattdessen. Sie können den Datumsteil jederzeit verwerfen. Verwenden Sie einfach start_time::time um die lokale zu erhalten Zeit von einem timestamptz . Oder verwenden Sie AT TIME ZONE
in Ihre Zeitzone zu übertragen.
Im Allgemeinen, um die Sommerzeit automatisch zu berücksichtigen , verwenden Sie einen Zeitzonennamen anstelle einer Zeitzonenabkürzung. Weitere Erläuterungen in dieser verwandten Frage und Antwort:
In Ihrem speziellen Fall könnten Sie wahrscheinlich America/Los_Angeles verwenden (Beispiel mit 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')
Ich habe dies gefunden, indem ich Folgendes überprüft habe:
SELECT * FROM pg_timezone_names
WHERE utc_offset = '-07:00'
AND is_dst;
Grundlagen zum Umgang mit Zeitzonen: