Fonction CONVERT_TIMEZONE - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Fonction CONVERT_TIMEZONE

CONVERT_TIMEZONE convertit un horodatage d’un fuseau horaire à un autre. La fonction s'ajuste automatiquement à 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

source_timezone ou target_timezone peuvent être spécifiés sous forme de nom de fuseau horaire (tel que « Africa/Kampala » ou « Singapore ») ou d'abréviation de fuseau horaire (telle que « 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 « Singapore » et le convertir en horodatage dans l'abréviation du fuseau horaire « PDT ».

Note

Les résultats de l'utilisation d'un nom de fuseau horaire ou d'une abréviation de fuseau horaire peuvent être différents en fonction de l'heure saisonnière locale, telle que l'heure d'été.

Utilisation d’un nom de fuseau horaire

Pour afficher la liste complète et actuelle 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 horaireEurope/Paris, abréviationCET, avec 01:00:00 décalage par rapport à l'heure UTC, et f indique que l'heure d'été n'est pas respectée. La deuxième rangée indique le fuseau horaireIsrael, abréviationIST, avec 02:00:00 décalage par rapport à l'heure UTC, et f indique que l'heure d'été n'est pas respectée.

pg_timezone_names ----------------- (Europe/Paris,CET,01:00:00,f) (Israel,IST,02: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 à l'aide d'un nom de fuseau horaire, CONVERT_TIMEZONE s'ajuste automatiquement à l'heure d'été (DST) ou à tout autre protocole saisonnier local, tel que l'heure d'été, l'heure standard ou l'heure d'hiver, qui est en vigueur pour ce fuseau horaire à la date et à l'heure spécifiées par « horodatage ». Par exemple, « Europe/Londres » représente l’heure UTC en hiver et une heure est ajoutée en été.

Utilisation d’une abréviation du fuseau horaire

Pour afficher la liste actuelle et complète des abréviations des 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 PacifiquePST, -08:00:00 décalée par rapport à l'heure UTC, f pour indiquer que l'heure d'été n'est pas respectée.

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 de fuseau horaire, CONVERT_TIMEZONE utilise le décalage fixe par rapport à l'UTC et ne s'ajuste à 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)