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

¿Cómo convertir la hora local a UTC?

Esto está cubierto en el manual , pero no siempre es obvio cómo trabajar realmente con fechas/horas. La especificación de SQL es un poco extraña.

En el caso de su pregunta, no está claro si desea almacenar la hora en UTC pero mostrarla en la hora local del servidor (TimeZone ), o si desea ignorar TimeZone y mostrarlo siempre como UTC. Asumiré lo último.

Para las marcas de tiempo, solo usaría AT TIME ZONE dos veces, como:

SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';

Necesitas usar AT TIME ZONE dos veces. Una vez para convertir la entrada timestamp a timestamptz de acuerdo con el argumento zona horaria, luego otro para convertirlo en una timestamp a las UTC.

Desafortunadamente, debido a la forma en que la especificación SQL define AT TIME ZONE para TIME , no puedes hacer lo mismo para TIME . Tendrás que manipular el TimeZone variable en su lugar:

SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';

Esto todavía te deja con un timetz no es un time . Entonces su valor de visualización cambia con la timezone ajuste.