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

Come convertire l'ora locale in UTC?

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.