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

Come conoscere un fuso orario di un timestamp in postgresql 8.3

Presumo che tu abbia una colonna denominata ct che ha il tipo TIMESTAMPTZ nella tabella t . Quindi puoi usare:

SELECT EXTRACT(TIMEZONE FROM ct) FROM t;

per ottenere l'offset del fuso orario in secondi. Questo ti dà 3600 da UTC /GMT ciò significa o GMT+1 , CET o altro. Il valore restituito dipende dal tuo TIMEZONE impostazione.

Esempio (vivo in Germania, il fuso orario attuale è GMT+1 /CET ):

test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
      timestamptz       
------------------------
 2008-01-01 18:00:00+01

test=# set timezone to 'gmt';
SET
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
      timestamptz       
------------------------
 2008-01-01 17:00:00+00

Come puoi vedere, emette sempre qualsiasi cosa nel fuso orario configurato. Quindi l'offset che otterrai con EXTRACT(TIMEZONE FROM ...) dipende dal tuo TIMEZONE ambientazione. Il fuso orario indicato su INSERT è perso, perché non vale la pena di essere salvato. L'importante è che tutto sia corretto e che non debba dipendere dal TIMEZONE ambientazione. PostgreSQL lo fa molto bene.