Questo è trattato nel manual, ma non è sempre evidente come lavorare effettivamente con date/orari. Le specifiche SQL sono un po 'bizzarre.
Nel caso della tua domanda non è chiaro se si desidera memorizzare il tempo in UTC, ma visualizzarla in tempo locale del server (TimeZone
), o se si wan di ignorare TimeZone
e sempre visualizzarla come UTC. Assumerò quest'ultimo.
Per timestamp si sarebbe 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';
è necessario utilizzare AT TIME ZONE
due volte. Una volta per convertire l'input da timestamp
a timestamptz
in base all'argomento fuso orario, quindi un altro per convertirlo in un timestamp
in UTC.
Sfortunatamente a causa del modo (IMO insano) la specifica SQL definisce AT TIME ZONE
per TIME
, non è possibile fare la stessa cosa per TIME
. Dovrete manipolare la variabile TimeZone
invece:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Questo ti lascia ancora con un non timetz
un time
. Quindi il suo valore di visualizzazione cambia con l'impostazione timezone
.
fonte
2013-08-12 19:13:45
http://www.postgresql.org/docs/8.3/static/functions-datetime.html#FUNCTIONS-DATETIME-ZONECONVERT – AdamKG