Función CONVERT_TIMEZONE
CONVERT_TIMEZONE convierte una marca temporal de una zona horaria a otra. La función se ajusta automáticamente al horario de verano.
Sintaxis
CONVERT_TIMEZONE( ['source_timezone',] 'target_timezone', 'timestamp')
Argumentos
- source_timezone
-
(Opcional) La zona horaria de la marca temporal actual. El valor predeterminado es UTC. Para obtener más información, consulte Notas de uso de la zona horaria.
- target_timezone
-
La zona horaria para la marca temporal nueva. Para obtener más información, consulte Notas de uso de la zona horaria.
- timestamp
-
Una columna de marca temporal o una expresión que, implícitamente, se convierte en una marca temporal.
Tipo de retorno
TIMESTAMP
Notas de uso de la zona horaria
Tanto source_timezone como target_timezone pueden especificarse como un nombre de zona horaria (por ejemplo, “África/Kampala” o “Singapur”) o como una abreviatura de zona horaria (por ejemplo, “UTC” o “PDT”). No es necesario convertir los nombres de las zonas horarias en nombres ni las abreviaturas en abreviaturas. Por ejemplo, puede elegir una marca de tiempo en el nombre de zona horaria de origen “Singapur” y convertirla en una marca de tiempo en la abreviatura de zona horaria “PDT”.
nota
Los resultados de usar un nombre de zona horaria o una abreviatura de zona horaria pueden ser diferentes debido a la hora estacional local (por ejemplo, el horario de verano).
Uso de un nombre de zona horaria
Para ver una lista actualizada y completa de los nombres de zonas horarias, ejecute el siguiente comando.
select pg_timezone_names();
Cada fila contiene una cadena separada por comas con el nombre de la zona horaria, la abreviatura, el desfase UTC y el indicador de si la zona horaria sigue el horario de verano (t
of
). Por ejemplo, en el siguiente fragmento se muestran dos filas resultantes. La primera fila es la zona horaria Europe/Paris
, la abreviatura CET
, con un desfase de 01:00:00
con respecto a UTC y f
para indicar que no sigue el horario de verano. La segunda fila es la zona horaria Israel
, la abreviatura IST
, con un desfase de 02:00:00
con respecto a UTC y f
para indicar que no sigue el horario de verano.
pg_timezone_names
-----------------
(Europe/Paris,CET,01:00:00,f)
(Israel,IST,02:00:00,f)
Ejecute la instrucción SQL para obtener la lista completa y buscar un nombre de zona horaria. Se devuelven aproximadamente 600 filas. Aunque algunos de los nombres de zonas horarias devueltos son siglas o acrónimos en mayúsculas (por ejemplo: GB, PRC, ROK), la función CONVERT_TIMEZONE los trata como nombres de zonas horarias, no abreviaturas de zonas horarias.
Si especifica una zona horaria mediante un nombre de zona horaria, CONVERT_TIMEZONE se ajusta automáticamente al horario de verano (DST) o a cualquier otro protocolo de temporada local, como el horario de verano, el horario estándar o el horario de invierno, que esté vigente en esa zona horaria durante la fecha y hora especificadas por “timestamp”. Por ejemplo, “Europa/Londres” representa UTC en invierno y suma una hora en verano.
Uso de una abreviatura de zona horaria
Para ver una lista actualizada y completa de las abreviaturas de zona horaria, ejecute el siguiente comando.
select pg_timezone_abbrevs();
Los resultados contienen una cadena separada por comas con la abreviatura de la zona horaria, el desfase UTC y un indicador de si la zona horaria sigue el horario de verano (t
o f
). Por ejemplo, en el siguiente fragmento se muestran dos filas resultantes. La primera fila contiene la abreviatura del horario de verano del Pacífico PDT
, con un desfase de -07:00:00
con respecto a UTC y t
para indicar que sigue el horario de verano. La primera fila contiene la abreviatura de hora estándar del Pacífico PST
, con un desfase de -08:00:00
con respecto a UTC y f
para indicar que no sigue el horario de verano.
pg_timezone_abbrevs
--------------------
(PDT,-07:00:00,t)
(PST,-08:00:00,f)
Ejecute la instrucción SQL para obtener la lista completa y buscar una abreviatura basada en su indicador de desfase y horario de verano. Se devuelven aproximadamente 200 filas.
Las abreviaturas de zona horaria representan un desfase fijo a partir de UTC. Si especifica una zona horaria mediante una abreviatura de zona horaria, CONVERT_TIMEZONE usa el desfase fijo con respecto a UTC para cualquier protocolo de temporada local.
Uso del formato estilo POSIX
Una especificación de zona horaria de estilo POSIX toma la forma STDoffset o STDoffsetDST, donde STD es la abreviatura de la zona horaria, offset es el ajuste numérico en horas hacia el oeste desde UTC y DST es la abreviatura opcional del horario de verano de la zona. Se supone que el horario de verano adelanta una hora, en función del desplazamiento dado.
Los formatos de zona horaria estilo POSIX usan desfases positivos al oeste de Greenwich, al contrario que la convención de la norma ISO 8601, que usa desfases positivos al este de Greenwich.
A continuación, se muestran algunos ejemplos de zonas horarias estilo POSIX:
-
PST8
-
PST8PDT
-
EST5
-
EST5EDT
nota
Amazon Redshift no valida las especificaciones de zona horaria con estilo POSIX, por lo que es posible establecer la zona horaria en un valor no válido. Por ejemplo, el siguiente comando no devuelve un mensaje de error, a pesar de que establece la zona horaria en un valor no válido.
set timezone to ‘xxx36’;
Ejemplos
En muchos ejemplos se utiliza el conjunto de datos de muestra TICKIT. Para obtener más información, consulte Base de datos de muestra.
En el siguiente ejemplo, se convierte el valor de la marca temporal de la zona horaria UTC predeterminada a la zona horaria PST.
select convert_timezone('PST', '2008-08-21 07:23:54');
convert_timezone ------------------------ 2008-08-20 23:23:54
En el siguiente ejemplo, el valor de la marca temporal que aparece en la columna LISTTIME se convierte de la zona horaria UTC predeterminada a la zona horaria PST. Aunque la marca temporal se encuentra dentro del periodo de horario de verano, se convierte a horario estándar porque la zona horaria objetivo se especifica como una abreviatura (PST).
select listtime, convert_timezone('PST', listtime) from listing where listid = 16;
listtime | convert_timezone --------------------+------------------- 2008-08-24 09:36:12 2008-08-24 01:36:12
En el siguiente ejemplo, la marca temporal que aparece en la columna LISTTIME se convierte de la zona horaria predeterminada UTC a la zona horaria US/Pacific. La zona horaria objetivo usa un nombre de zona horaria y la marca temporal se encuentra dentro del periodo de horario de verano, por lo que la función devuelve el horario de verano.
select listtime, convert_timezone('US/Pacific', listtime) from listing where listid = 16;
listtime | convert_timezone --------------------+--------------------- 2008-08-24 09:36:12 | 2008-08-24 02:36:12
En el siguiente ejemplo, se convierte una cadena de marca temporal de EST a PST:
select convert_timezone('EST', 'PST', '20080305 12:25:29');
convert_timezone ------------------- 2008-03-05 09:25:29
En el siguiente ejemplo, se convierte una marca temporal al horario del este de Estados Unidos estándar porque la zona horaria objetivo usa un nombre de zona horaria (America/New_York) y la marca temporal se encuentra dentro del periodo estándar.
select convert_timezone('America/New_York', '2013-02-01 08:00:00');
convert_timezone --------------------- 2013-02-01 03:00:00 (1 row)
En el siguiente ejemplo, se convierte la marca temporal al horario de verano del este de Estados Unidos porque la zona horaria objetivo usa un nombre de zona horaria (America/New_York) y la marca temporal se encuentra dentro del periodo de horario de verano.
select convert_timezone('America/New_York', '2013-06-01 08:00:00');
convert_timezone --------------------- 2013-06-01 04:00:00 (1 row)
En el siguiente ejemplo, se demuestra el uso de desplazamientos.
SELECT CONVERT_TIMEZONE('GMT','NEWZONE +2','2014-05-17 12:00:00') as newzone_plus_2, CONVERT_TIMEZONE('GMT','NEWZONE-2:15','2014-05-17 12:00:00') as newzone_minus_2_15, CONVERT_TIMEZONE('GMT','America/Los_Angeles+2','2014-05-17 12:00:00') as la_plus_2, CONVERT_TIMEZONE('GMT','GMT+2','2014-05-17 12:00:00') as gmt_plus_2;
newzone_plus_2 | newzone_minus_2_15 | la_plus_2 | gmt_plus_2 ---------------------+---------------------+---------------------+--------------------- 2014-05-17 10:00:00 | 2014-05-17 14:15:00 | 2014-05-17 10:00:00 | 2014-05-17 10:00:00 (1 row)