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: