PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como saber um fuso horário de um timestamp no postgresql 8.3


Suponho que você tenha uma coluna chamada ct que tem o tipo TIMESTAMPTZ na tabela t . Então você pode usar:
SELECT EXTRACT(TIMEZONE FROM ct) FROM t;

para obter o deslocamento do fuso horário em segundos. É o que lhe dá 3600 de UTC /GMT isso significa que GMT+1 , CET como queiras. O valor retornado depende do seu TIMEZONE contexto.

Exemplo (moro na Alemanha, fuso horário real é 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

Como você pode ver, sempre gera qualquer coisa no fuso horário configurado. Portanto, o deslocamento que você obterá com EXTRACT(TIMEZONE FROM ...) depende do seu TIMEZONE contexto. O fuso horário que foi fornecido em INSERT está perdido, porque não vale a pena ser salvo. O que conta é que tudo está correto e isso não deve depender do TIMEZONE contexto. O PostgreSQL faz isso muito bem.