Questo è trattato nel manuale , ma non è sempre ovvio come lavorare effettivamente con date/orari. Le specifiche SQL sono un po' bizzarre.
Nel caso della tua domanda non è chiaro se desideri memorizzare l'ora in UTC ma visualizzarla nell'ora locale del server (TimeZone
), o se vuoi ignorare TimeZone
e visualizzalo sempre come UTC. Presumo quest'ultimo.
Per i timestamp dovresti semplicemente usare AT TIME ZONE
due volte, come:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Devi usare AT TIME ZONE
due volte. Una volta per convertire il timestamp
di input a timestamptz
in base all'argomento timezone, quindi un altro per convertirlo in un timestamp
alle UTC.
Sfortunatamente a causa del modo (folle dell'IMO) in cui le specifiche SQL definiscono AT TIME ZONE
per TIME
, non puoi fare la stessa cosa per TIME
. Dovrai manipolare il TimeZone
variabile invece:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Questo ti lascia ancora con un timetz
non un time
. Quindi il suo valore visualizzato cambia con il timezone
impostazione.