Fonction CONVERT_TIMEZONE - Amazon Redshift

Amazon Redshift ne prendra plus en charge la création de nouvelles fonctions Python définies par l’utilisateur à compter du 1er novembre 2025. Si vous souhaitez utiliser des fonctions Python définies par l’utilisateur, créez-les avant cette date. Les fonctions Python définies par l’utilisateur existantes continueront de fonctionner normalement. Pour plus d’informations, consultez le billet de blog .

Fonction CONVERT_TIMEZONE

CONVERT_TIMEZONE convertit un horodatage d’un fuseau horaire à un autre. La fonction s’ajuste automatiquement pour l’heure d’été.

Syntaxe

CONVERT_TIMEZONE( ['source_timezone',] 'target_timezone', 'timestamp')

Arguments

source_timezone

(Facultatif) Fuseau horaire de l’horodatage actuel. La valeur par défaut est UTC. Pour plus d'informations, consultez Remarques sur l’utilisation de fuseaux horaires.

target_timezone

Fuseau horaire du nouvel horodatage. Pour plus d'informations, consultez Remarques sur l’utilisation de fuseaux horaires.

timestamp

Colonne timestamp ou expression qui convertit implicitement en un horodatage.

Type de retour

TIMESTAMP

Remarques sur l’utilisation de fuseaux horaires

Vous pouvez spécifier source_timezone ou target_timezone comme nom de fuseau horaire (par exemple, « Afrique/Kampala » ou « Singapour ») ou comme une abréviation de fuseau horaire (par exemple, « UTC » ou « PDT »). Il n’est pas nécessaire de convertir les noms de fuseaux horaires en noms ou les abréviations en abréviations. Par exemple, vous pouvez choisir un horodatage à partir du nom du fuseau horaire source « Singapour » et le convertir en horodatage dans l’abréviation du fuseau horaire « PDT ».

Note

Les résultats découlant de l’utilisation d’un nom ou d’une abréviation de fuseau horaire peuvent varier en raison d’une heure saisonnière locale, par exemple l’heure d’été.

Utilisation d’un nom de fuseau horaire

Pour obtenir une liste actualisée et complète des noms de fuseaux horaires, exécutez la commande suivante.

select pg_timezone_names();

Chaque ligne contient une chaîne séparée par des virgules avec le nom du fuseau horaire, l’abréviation, le décalage UTC et un indicateur si le fuseau horaire respecte l’heure d’été (t ou f). Par exemple, l’extrait suivant montre deux lignes résultantes. La première ligne indique le fuseau horaire Antarctica/South Pole, l’abréviation NZDT, avec le décalage 13:00:00 par rapport à l’heure UTC et f pour indiquer que l’heure d’été n’est pas respectée. La deuxième ligne indique le fuseau horaire Europe/Paris, l’abréviation CET, avec le décalage 01:00:00 par rapport à l’heure UTC et f pour indiquer que l’heure d’été est respectée.

pg_timezone_names ------------------ (Antarctica/South_Pole,NZDT,13:00:00,t) (Europe/Paris,CET,01:00:00,f)

Exécutez l'instruction SQL pour obtenir la liste complète et trouver un nom de fuseau horaire. Environ 600 lignes sont renvoyées. Bien que certains des noms de fuseaux horaires renvoyés sont des sigles en majuscules ou des acronymes (par exemple : GB, PRC, ROK, etc.), la fonction CONVERT_TIMEZONE les traite comme des noms de fuseaux horaires, pas comme des abréviations de fuseaux horaires.

Si vous spécifiez un fuseau horaire en utilisant son nom, CONVERT_TIMEZONE s’ajuste automatiquement pour l’heure d’été, ou n’importe quel autre protocole saisonnier local, tel que l’heure normale ou l’heure d’hiver, qui est en vigueur pour ce fuseau horaire à la date et à l’heure spécifiées par « timestamp ». Par exemple, « Europe/Londres » représente l’heure UTC en hiver et une heure est ajoutée en été. Notez qu’Amazon Redshift utilise la base de données de fuseaux horaires de l’IANA comme source officielle de spécification des fuseaux horaires.

Utilisation d’une abréviation du fuseau horaire

Pour obtenir une liste actualisée et complète des abréviations de fuseaux horaires, exécutez la commande suivante.

select pg_timezone_abbrevs();

Les résultats contiennent une chaîne séparée par des virgules avec l’abréviation du fuseau horaire, le décalage UTC et un indicateur si le fuseau horaire respecte l’heure d’été (t ou f). Par exemple, l’extrait suivant montre deux lignes résultantes. La première ligne contient l’abréviation de l’heure d’été du Pacifique PDT, avec un décalage -07:00:00 par rapport à l’UTC et t pour indiquer qu’elle respecte l’heure d’été. La deuxième ligne contient l’abréviation de l’heure normale du Pacifique PST, avec un décalage -08:00:00 par rapport à l’UTC et f pour indiquer qu’elle ne respecte pas l’heure d’été.

pg_timezone_abbrevs -------------------- (PDT,-07:00:00,t) (PST,-08:00:00,f)

Exécutez l’instruction SQL pour obtenir la liste complète et trouver une abréviation en fonction de son indicateur de décalage et d’heure d’été. Environ 200 lignes sont renvoyées.

Les abréviations de fuseaux horaires représentent un décalage fixe de l’UTC. Si vous spécifiez un fuseau horaire à l’aide d’une abréviation du fuseau horaire, CONVERT_TIMEZONE utilise le décalage fixe de l’UTC et ne s’ajuste pour aucun protocole saisonnier local.

Utilisation du format POSIX-Style

Une spécification de fuseau horaire de type POSIX sous la forme STDoffset ou STDoffsetDST, où STD est une abréviation de fuseau horaire, offset est le décalage numérique en heures à l’ouest d’UTC et DST est une abréviation facultative de la zone de l’heure d’été. L’heure d’été est supposée être une heure d’avance par rapport au décalage donné.

Les formats de fuseaux horaires de style POSIX utilisent des décalages positifs à l’ouest de Greenwich, contrairement à la convention ISO-8601, qui utilise des décalages positifs à l’est de Greenwich.

Voici des exemples de fuseaux horaires de style POSIX :

  • PST8

  • PST8PDT

  • EST5

  • EST5EDT

Note

Amazon Redshift ne valide pas les spécifications de fuseaux horaires de style POSIX, il est donc possible définir le fuseau horaire sur une valeur non valide. Par exemple, la commande suivante ne renvoie pas d’erreur, même si elle définit le fuseau horaire sur une valeur non valide.

set timezone to ‘xxx36’;

Exemples

Bon nombre d’exemples utilisent l’exemple d’ensemble de données TICKIT. Pour plus d’informations, consultez Exemple de base de données.

L’exemple suivant convertit la valeur d’horodatage du fuseau horaire UTC par défaut en HNP.

select convert_timezone('PST', '2008-08-21 07:23:54'); convert_timezone ------------------------ 2008-08-20 23:23:54

L’exemple suivant convertit la valeur d’horodatage dans la colonne LISTTIME du fuseau horaire UTC par défaut en HNP. Même si l’horodatage est à l’heure d’été, il est converti en heure normale, car le fuseau horaire cible est spécifié comme abréviation (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’exemple suivant convertit une colonne LISTTIME d’horodatage du fuseau horaire UTC par défaut en fuseau horaire des États-Unis/Pacifique. Le fuseau horaire cible utilise un nom de fuseau horaire, et l’horodatage se situe pendant la période l’heure d’été, donc la fonction renvoie l’heure.

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’exemple suivant convertit une chaîne d’horodatage de l’EST à PST :

select convert_timezone('EST', 'PST', '20080305 12:25:29'); convert_timezone ------------------- 2008-03-05 09:25:29

L’exemple suivant convertit un horodatage à l’heure normale de l’est des États-Unis, car le fuseau horaire cible utilise un nom de fuseau horaire (Amérique/New_York) et que l’horodatage est à l’heure normale.

select convert_timezone('America/New_York', '2013-02-01 08:00:00'); convert_timezone --------------------- 2013-02-01 03:00:00 (1 row)

L’exemple suivant convertit un horodatage à l’heure d’été de l’est des États-Unis, car le fuseau horaire cible utilise un nom de fuseau horaire (Amérique/New_York) et que l’horodatage est à l’heure d’été.

select convert_timezone('America/New_York', '2013-06-01 08:00:00'); convert_timezone --------------------- 2013-06-01 04:00:00 (1 row)

L’exemple suivant illustre l’utilisation des décalages.

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)