Funktion CONVERT_TIMEZONE - Amazon Redshift

Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting.

Funktion CONVERT_TIMEZONE

CONVERT_TIMEZONE konvertiert einen Zeitstempel von einer Zeitzone zu einer anderen. Die Funktion passt sich automatisch an die Sommerzeit an.

Syntax

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

Argumente

source_timezone

(Optional) Die Zeitzone des aktuellen Zeitstempels. Der Standardwert ist UTC. Weitere Informationen finden Sie unter Nutzungshinweise zu Zeitstempeln.

target_timezone

Die Zeitzone für den neuen Zeitstempel. Weitere Informationen finden Sie unter Nutzungshinweise zu Zeitstempeln.

timestamp

Eine Zeitstempelspalte bzw. ein entsprechender Ausdruck, die/der implizit zu einem Zeitstempel konvertiert wird.

Rückgabetyp

TIMESTAMP

Nutzungshinweise zu Zeitstempeln

Sie können source_timezone oder target_timezone als Zeitzonenname (beispielsweise „Africa/Kampala“ oder „Singapur“) oder als Zeitzonenabkürzung (beispielsweise „UTC“ oder „PDT“) angeben. Sie müssen Zeitzonennamen nicht in Namen oder Abkürzungen in Abkürzungen konvertieren. Sie können beispielsweise einen Zeitstempel aus dem Quellzeitzonennamen „Singapur“ auswählen und ihn in einen Zeitstempel in der Zeitzonenabkürzung „PDT“ konvertieren.

Anmerkung

Die Ergebnisse bei der Verwendung eines Zeitzonennamens oder einer Zeitzonenabkürzung können aufgrund lokaler saisonaler Zeit, wie z. B. Sommerzeit, unterschiedlich sein.

Verwendung eines Zeitzonennamens

Eine aktuelle und vollständige Liste der Zeitzonennamen erhalten Sie, wenn Sie den folgenden Befehl ausführen.

select pg_timezone_names();

Jede Zeile enthält eine durch Kommata getrennte Zeichenfolge mit dem Namen der Zeitzone, der Abkürzung, dem UTC-Offset und der Angabe, ob in der Zeitzone die Sommerzeit gilt (t oder f). Das folgende Snippet zeigt beispielsweise zwei Ergebniszeilen. Die erste Zeile enthält die Zeitzone Antarctica/South Pole, die Abkürzung NZDT mit einem UTC-Offset von 13:00:00 sowie die Angabe f, um anzuzeigen, dass die Sommerzeit nicht gilt. Die zweite Zeile enthält die Zeitzone Europe/Paris, die Abkürzung CET mit einem UTC-Offset von 01:00:00 sowie die Angabe f, um anzuzeigen, dass die Sommerzeit gilt.

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

Führen Sie die SQL-Anweisung aus, um die gesamte Liste abzurufen und einen Zeitzonennamen zu finden. Es werden ungefähr 600 Zeilen zurückgegeben. Auch wenn es sich bei einigen der zurückgegebenen Zeitzonennamen um Akronyme handelt (etwa GB, PRC, ROK), werden sie von der Funktion CONVERT_TIMEZONE als Zeitzonennamen und nicht als Zeitzonenabkürzungen behandelt.

Wenn Sie eine Zeitzone mit einem Zeitzonennamen angeben, nimmt CONVERT_TIMEZONE automatisch Anpassungen für die Sommerzeit oder andere lokale saisonale Protokolle wie beispielsweise Standardzeit oder Winterzeit vor, die für die betreffende Zeitzone während des von „timestamp“ angegebenen Datums bzw. der Uhrzeit gelten. So steht beispielsweise „Europe/London“ für UTC im Winter, im Sommer kommt eine Stunde dazu. Beachten Sie, dass Amazon Redshift die IANA-Zeitzonendatenbank als maßgebliche Quelle für die Zeitzonenspezifikation verwendet.

Verwendung einer Zeitzonenabkürzung

Führen Sie für eine vollständige Liste der Zeitzonenabkürzungen den folgenden Befehl aus.

select pg_timezone_abbrevs();

Die Ergebnisse enthalten eine durch Kommata getrennte Zeichenfolge mit der Abkürzung der Zeitzone, dem UTC-Offset und der Angabe, ob in der Zeitzone die Sommerzeit gilt (t oder f). Das folgende Snippet zeigt beispielsweise zwei Ergebniszeilen. Die erste Zeile enthält die Abkürzung für Pacific Daylight Time PDT mit einem UTC-Offset von -07:00:00 sowie die Angabe t, um anzuzeigen, dass die Sommerzeit gilt. Die zweite Zeile enthält die Abkürzung für Pacific Daylight Time PST mit einem UTC-Offset von -08:00:00 sowie die Angabe f, um anzuzeigen, dass die Sommerzeit nicht gilt.

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

Führen Sie die SQL-Anweisung aus, um die gesamte Liste abzurufen und anhand des Offsets und der Angabe zur Sommerzeit nach einer Abkürzung zu suchen. Es werden ungefähr 200 Zeilen zurückgegeben.

Zeitzonenabkürzungen stehen für eine feste Verschiebung von der UTC. Wenn Sie eine Zeitzone mit einer Zeitzonenabkürzung angeben, verwendet CONVERT_TIMEZONE die feste Verschiebung von UTC und nimmt keine Anpassungen an saisonale lokale Protokolle vor.

Verwendung des POSIX-Stil-Formats

Eine Zeitzonenangabe im POSIX-Stil hat die Form STDoffset oder STDoffsetDST, wobei STD eine Zeitzonenabkürzung ist, offset die numerische Verschiebung in Stunden westlich von UTC und DST eine optionale Abkürzung für die Sommerzeit. Für die Sommerzeit wird angenommen, dass sie eine Stunde vor der angegebenen Verschiebung liegt.

Zeitzonenformate im POSIX-Stil verwenden positive Verschiebungen westlich von Greenwich; im Gegensatz dazu verwendet die ISO-8601-Konvention östlich von Greenwich positive Werte.

Es folgen einige Beispiele für Zeitzonen im POSIX-Stil:

  • PST8

  • PST8PDT

  • EST5

  • EST5EDT

Anmerkung

Amazon Redshift validiert Zeitzonenangaben im POSIX-Stil-Format nicht, es kann daher sein, dass die Zeitzone auf einen ungültigen Wert gesetzt wird. Beispielsweise führt der folgende Befehl nicht zu einem Fehler, obwohl dadurch die Zeitzone auf einen ungültigen Wert gesetzt wird.

set timezone to ‘xxx36’;

Beispiele

Viele der Beispiele verwenden den TICKIT-Beispieldatensatz. Weitere Informationen finden Sie unter Beispieldatenbank.

Das folgende Beispiel konvertiert den Zeitstempelwert von der Standardzeitzone UTC zu PST.

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

Das folgende Beispiel konvertiert den Zeitstempelwert in der Spalte LISTTIME von der Standardzeitzone UTC zu PST. Obwohl der Zeitstempel in der Sommerzeitzone liegt, wird er zur Standardzeit konvertiert, da die Zielzeitzone als Abkürzung (PST) angegeben ist.

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

Das folgende Beispiel konvertiert eine Zeitstempel-LISTTIME-Spalte von der Standardzeitzone UTC zur Zeitzone US/Pacific time. Die Zielzeitzone verwendet einen Zeitzonennamen, und der Zeitstempel liegt im Sommerzeitzeitraum, weshalb die Funktion die Sommerzeit ausgibt.

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

Das folgende Beispiel konvertiert eine Zeitstempelzeichenfolge von EST zu PST:

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

Das folgende Beispiel konvertiert einen Zeitstempel zu US Eastern Standard Time, da die Zielzeitzone einen Zeitzonennamen (America/New York) verwendet und der Zeitstempel im Standardzeitzeitraum liegt.

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

Das folgende Beispiel konvertiert einen Zeitstempel zu US Eastern Daylight Time, da die Zielzeitzone einen Zeitzonennamen (America/New York) verwendet und der Zeitstempel im Sommerzeitzeitraum liegt.

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

Das folgende Beispiel illustriert die Verwendung von Verschiebungen.

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)