PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Zeit mit Zeitzone Sommerzeit einfügen

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: