without to_timestamp formato example ejemplo postgresql datetime timezone

postgresql - to_timestamp - ¿Cómo obtengo el nombre de la zona horaria actual en Postgres 9.3?



select timestamp postgresql (4)

Esto puede o no ayudarlo a resolver su problema, OP, pero para obtener la zona horaria del servidor actual en relación con UTC ( UT1 , técnicamente), haga lo siguiente:

SELECT EXTRACT(TIMEZONE FROM now())/3600.0;

Lo anterior funciona extrayendo el desplazamiento relativo de UT1 en minutos y luego convirtiéndolo en horas usando el factor de 3600 segundos / hora.

Ejemplo:

SET SESSION timezone TO ''Asia/Kabul''; SELECT EXTRACT(TIMEZONE FROM now())/3600.0; -- output: 4.5 (as of the writing of this post)

( docs ).

Quiero obtener el nombre de la zona horaria actual. Lo que ya logré es obtener la utc_offset / timezone a través de:

SELECT * FROM pg_timezone_names WHERE abbrev = current_setting(''TIMEZONE'')

Esto me da todas las combinaciones Continente / Capital para esta zona horaria, pero no la timezone exacta. Por ejemplo me sale:

Europe/Amsterdam Europe/Berlin

El servidor está en Berlin y quiero obtener el nombre de la zona horaria del servidor.

El problema que tengo con CET es que siempre es UTC+01:00 y no tiene en cuenta DST iirc .


No creo que esto sea posible usando PostgreSQL solo en el caso más general. Cuando instala PostgreSQL, elige una zona horaria. Estoy bastante seguro de que el valor predeterminado es usar la zona horaria del sistema operativo. Eso generalmente se reflejará en postgresql.conf como el valor del parámetro "zona horaria". Pero el valor termina como "localtime". Puede ver esta configuración con la instrucción SQL.

show timezone;

Pero si cambia la zona horaria en postgresql.conf a algo así como "Europa / Berlín", show timezone; devolverá ese valor en lugar de "localtime".

Por lo tanto, creo que su solución implicará establecer "zona horaria" en postgresql.conf en un valor explícito en lugar de la "hora local" predeterminada.


Parece funcionar bien en Postgresql 9.5 :

=> /! date +%Z


Ver esta respuesta: Source

Si la zona horaria no se especifica en postgresql.conf o como una opción de línea de comandos del servidor, el servidor intenta usar el valor de la variable de entorno TZ como la zona horaria predeterminada. Si TZ no está definido o no es ninguno de los nombres de zona horaria conocidos por PostgreSQL, el servidor intenta determinar la zona horaria predeterminada del sistema operativo al verificar el comportamiento de la función de biblioteca C localtime (). La zona horaria predeterminada se selecciona como la coincidencia más cercana entre las zonas horarias conocidas de PostgreSQL. (Estas reglas también se utilizan para elegir el valor predeterminado de log_timezone, si no se especifica).

Esto significa que si no define una zona horaria, el servidor intenta determinar la zona horaria predeterminada del sistema operativo comprobando el comportamiento de la función de biblioteca C localtime ().

Si la zona horaria no se especifica en postgresql.conf o como una opción de línea de comandos del servidor, el servidor intenta usar el valor de la variable de entorno TZ como la zona horaria predeterminada.

Parece que es posible establecer la zona horaria del sistema.

Obtenga la zona horaria local del sistema operativo desde el shell. En psql:

SELECT current_setting(''TIMEZONE'');