Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog
Funzione CONVERT_TIMEZONE
CONVERT_TIMEZONE converte un timestamp da un fuso orario a un altro. La funzione si regola automaticamente in base all’ora legale.
Sintassi
CONVERT_TIMEZONE( ['source_timezone',] 'target_timezone', 'timestamp')
Argomenti
- source_timezone
-
(Facoltativo) Il fuso orario del timestamp corrente. Il valore predefinito è UTC. Per ulteriori informazioni, consultare Note sull'utilizzo dei fusi orari.
- target_timezone
-
Il fuso orario del nuovo timestamp. Per ulteriori informazioni, consultare Note sull'utilizzo dei fusi orari.
- timestamp
-
Una colonna timestamp o un'espressione che viene implicitamente convertita in un timestamp.
Tipo restituito
TIMESTAMP
Note sull'utilizzo dei fusi orari
È possibile specificare source_timezone o target_timezone come nome di fuso orario (ad esempio, “Africa/Kampala” o “Singapore”) oppure come abbreviazione di fuso orario (ad esempio, “UTC” o “PDT”). Non devi convertire i nomi dei fusi orari in nomi o le abbreviazioni in abbreviazioni. Ad esempio, puoi scegliere un timestamp dal nome del fuso orario di origine “Singapore” e convertirlo in un timestamp con l’abbreviazione del fuso orario “PDT”.
Nota
I risultati dell’utilizzo del nome di un fuso orario o dell’abbreviazione di un fuso orario possono variare in base all’ora stagionale locale, ad esempio l’ora legale.
Utilizzo di un nome di fuso orario
Per visualizzare un elenco completo e aggiornato dei nomi dei fusi orari, esegui il comando seguente.
select pg_timezone_names();
Ogni riga contiene una stringa separata da virgole con il nome del fuso orario, l’abbreviazione, l’offset UTC e l’indicatore se il fuso orario osserva l’ora legale (t o f). Ad esempio, il frammento seguente mostra come risultati due righe. La prima riga contiene il fuso orario di Antarctica/South Pole, l’abbreviazione NZDT, con l’offset 13:00:00 rispetto a UTC e f per indicare che non osserva l’ora legale. La seconda riga contiene il fuso orario di Europe/Paris, l’abbreviazione CET, con l’offset 01:00:00 rispetto a UTC e f per indicare che non osserva l’ora legale.
pg_timezone_names
------------------
(Antarctica/South_Pole,NZDT,13:00:00,t)
(Europe/Paris,CET,01:00:00,f)
Esegui l'istruzione SQL per ottenere l'elenco completo e trovare il nome di un fuso orario. Vengono restituite circa 600 righe. Sebbene alcuni nomi di fusi orari restituiti siano acronimi o sigle maiuscole composte dalle lettere inziali (ad esempio, GB, PRC, ROK), la funzione CONVERT_TIMEZONE li tratta come nomi, non abbreviazioni, di fusi orari.
Se specifichi un fuso orario utilizzando un nome di fuso orario, CONVERT_TIMEZONE esegue automaticamente il passaggio all’ora legale (DST) o a qualsiasi altro protocollo stagionale locale, come l’ora solare o l’ora legale, in vigore per quel fuso orario durante la data e l’ora specificate da “timestamp”. Ad esempio, "Europe/London" rappresenta UTC in inverno e aggiunge un'ora in estate. Tieni presente che Amazon Redshift utilizza il database dei fusi orari di IANA
Utilizzo di un'abbreviazione di fuso orario
Per visualizzare un elenco completo e aggiornato delle abbreviazioni dei fusi orari, esegui il comando seguente.
select pg_timezone_abbrevs();
I risultati contengono una stringa separata da virgole con l’abbreviazione del fuso orario, l’offset UTC e l’indicatore che mostra se il fuso orario osserva l’ora legale (t o f). Ad esempio, il frammento seguente mostra come risultati due righe. La prima riga contiene l’abbreviazione dell’ora legale del Pacifico PDT, con l’offset -07:00:00 rispetto a UTC e t per indicare che osserva l’ora legale. La seconda riga contiene l’abbreviazione di Pacific Standard Time PST, con l’offset -08:00:00 rispetto a UTC e f per indicare che non osserva l’ora legale.
pg_timezone_abbrevs
--------------------
(PDT,-07:00:00,t)
(PST,-08:00:00,f)
Esegui l’istruzione SQL per ottenere l’elenco intero e trovare un’abbreviazione basata sull’offset e sull’indicatore relativo all’ora legale. Vengono restituite circa 200 righe.
Le abbreviazioni di fuso orario rappresentano un offset fisso rispetto a UTC. Se specifichi un fuso orario con un’abbreviazione di fuso orario, CONVERT_TIMEZONE utilizza l’offset fisso rispetto a UTC e non esegue il passaggio ad alcun protocollo stagionale locale.
Utilizzo del formato in stile POSIX
Una specifica di fuso orario in stile POSIX è nel formato STDoffset o STDoffsetDST, dove STD è un’abbreviazione di fuso orario, offset è l’offset numerico in ore a ovest di UTC e DST è un’abbreviazione facoltativa di fuso orario con ora legale. L’ora legale viene considerata come un’ora avanti rispetto all’offset specificato.
I formati di fuso orario in stile POSIX utilizzano offset positivi a ovest di Greenwich, contrariamente alla convenzione ISO-8601, che utilizza offset positivi a est di Greenwich.
Di seguito sono riportati alcuni esempi di fusi orari in stile POSIX:
-
PST8
-
PST8PDT
-
EST5
-
EST5EDT
Nota
Amazon Redshift non convalida le specifiche di fuso orario in stile POSIX, di conseguenza è possibile impostare il fuso orario su un valore non valido. Ad esempio, il comando seguente non restituisce un errore, anche se si imposta il fuso orario su un valore non valido.
set timezone to ‘xxx36’;
Esempi
La maggior parte degli esempi usa il set di dati TICKIT di esempio. Per ulteriori informazioni, consulta Database di esempio.
L'esempio seguente converte il valore di timestamp dal fuso orario UTC predefinito in PST.
select convert_timezone('PST', '2008-08-21 07:23:54');convert_timezone ------------------------ 2008-08-20 23:23:54
L'esempio seguente converte il valore di timestamp nella colonna LISTTIME dal fuso orario UTC predefinito in PST. Anche se il timestamp rientra nel periodo dell'ora legale, viene convertito nell'ora standard in quanto il fuso orario di destinazione è specificato come abbreviazione (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
L'esempio seguente converte una colonna LISTTIME di timestamp dal fuso orario UTC predefinito nel fuso orario Stati Uniti/Pacifico. Il fuso orario di destinazione utilizza un nome di fuso orario e il timestamp è nel periodo dell'ora legale, di conseguenza la funzione restituisce l'ora legale.
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
L'esempio seguente converte una stringa di timestamp da EST a PST:
select convert_timezone('EST', 'PST', '20080305 12:25:29');convert_timezone ------------------- 2008-03-05 09:25:29
L'esempio seguente converte un timestamp all'ora standard degli Stati Uniti orientali in quanto il fuso orario di destinazione utilizza un nome di fuso orario (America/New_York) e il timestamp si trova nel periodo dell'ora standard.
select convert_timezone('America/New_York', '2013-02-01 08:00:00');convert_timezone --------------------- 2013-02-01 03:00:00 (1 row)
L'esempio seguente converte il timestamp nell'ora legale dell'est degli Stati Uniti in quanto il fuso orario target utilizza un nome di fuso orario (America/New_York) e il timestamp si trova nel periodo dell'ora legale.
select convert_timezone('America/New_York', '2013-06-01 08:00:00');convert_timezone --------------------- 2013-06-01 04:00:00 (1 row)
L'esempio seguente illustra l'utilizzo di offset.
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)