Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
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
source_timezone o target_timezone possono essere specificati come nome del fuso orario (come «Africa/Kampala» o «Singapore») o come abbreviazione del fuso orario (come «UTC» o «PDT»). Non è necessario 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 di un'abbreviazione del fuso orario possono essere diversi a causa dell'ora stagionale locale, ad esempio l'ora legale.
Utilizzo di un nome di fuso orario
Per visualizzare un elenco aggiornato e completo 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, la relativa abbreviazione, la differenza rispetto al fuso 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 è il fuso orarioEurope/Paris
, abbreviazioneCET
, con 01:00:00
scostamento dall'UTC e f
per indicare che non si applica l'ora legale. La seconda riga è il fuso orarioIsrael
, abbreviazione, con 02:00:00
scostamento dall'UTCIST
, e f
per indicarlo non si applica l'ora legale.
pg_timezone_names
-----------------
(Europe/Paris,CET,01:00:00,f)
(Israel,IST,02: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 si specifica un fuso orario utilizzando un nome di fuso orario, CONVERT_TIMEZONE si adatta automaticamente all'ora legale (DST) o a qualsiasi altro protocollo stagionale locale, come l'ora legale, l'ora solare o l'ora invernale, 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.
Utilizzo di un'abbreviazione di fuso orario
Per visualizzare un elenco aggiornato e completo delle abbreviazioni dei fusi orari, esegui il comando seguente.
select pg_timezone_abbrevs();
I risultati contengono una stringa separata da virgole che include l'abbreviazione del fuso orario, la differenza rispetto al fuso 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 una differenza di -07:00:00
rispetto a UTC, e t
per indicare che si osserva l'ora legale. La seconda riga contiene l'abbreviazione di Pacific Standard TimePST
, con una differenza -08:00:00
rispetto all'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 e completo e trovare un'abbreviazione basata sulla differenza di fuso orario 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 specificate un fuso orario utilizzando un'abbreviazione del fuso orario, CONVERT_TIMEZONE utilizza l'offset fisso rispetto all'UTC e non si adatta ad alcun protocollo stagionale locale.
Utilizzo del formato in stile POSIX
Una specifica di fuso orario in stile POSIX è in 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)