sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo saber una zona horaria de una marca de tiempo en postgresql 8.3

Supongo que tiene una columna llamada ct que tiene el tipo TIMESTAMPTZ en la tabla t . Entonces puedes usar:

SELECT EXTRACT(TIMEZONE FROM ct) FROM t;

para obtener el desplazamiento de la zona horaria en segundos. Eso te da 3600 desde UTC /GMT eso significa GMT+1 , CET o lo que sea. El valor devuelto depende de su TIMEZONE ajuste.

Ejemplo (Vivo en Alemania, la zona horaria actual es 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 puede ver, siempre genera cualquier cosa en la zona horaria configurada. Entonces, el desplazamiento que obtendrá con EXTRACT(TIMEZONE FROM ...) depende de tu TIMEZONE ajuste. La zona horaria que se proporcionó en INSERT se pierde, porque no vale la pena ser salvado. Lo que cuenta es que todo esté correcto y que no deba depender de la TIMEZONE ajuste. PostgreSQL lo hace muy bien.