PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Inserire l'ora con l'ora legale del fuso orario

Il corretto modo è non usare time with time zone (nota lo spazio tra time e zone ) affatto, poiché è rotto dalla progettazione. È nello standard SQL, quindi Postgres supporta il tipo, ma consiglia non per usarlo. Altro in questa risposta correlata:

Poiché hai problemi con DST , timetz (nome breve) è una scelta particolarmente pessima. Non è attrezzato per gestire l'ora legale. È impossibile dire se 8:00:00 è in inverno o in estate.

Usa timestamp with time zone (timstamptz ) invece. Puoi sempre scartare la parte della data. Usa semplicemente start_time::time per ottenere il locale tempo da un timestamptz . Oppure usa AT TIME ZONE da trasporre al tuo fuso orario.

In genere, per prendere automaticamente in considerazione l'ora legale , utilizza un nome del fuso orario invece di un'abbreviazione di fuso orario. Maggiori spiegazioni in questa domanda e risposta correlata:

Nel tuo caso particolare, potresti probabilmente usare America/Los_Angeles (esempio con 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')

L'ho trovato controllando:

SELECT * FROM pg_timezone_names 
WHERE  utc_offset = '-07:00'
AND    is_dst;

Nozioni di base sulla gestione del fuso orario: