Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
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
source_timezone oder target_timezone können als Zeitzonenname (wie 'Africa/Kampala' oder 'Singapur') oder als Abkürzung für die Zeitzone (wie 'UTC' oder 'PDT') angegeben werden. 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 mit der Zeitzonenabkürzung „PDT“ konvertieren.
Anmerkung
Die Verwendung eines Zeitzonennamens oder einer Zeitzonenabkürzung kann aufgrund der lokalen Jahreszeit, z. B. der Sommerzeit, zu unterschiedlichen Ergebnissen führen.
Verwendung eines Zeitzonennamens
Führen Sie den folgenden Befehl aus, um eine aktuelle und vollständige Liste der Zeitzonennamen anzuzeigen.
select pg_timezone_names();
Jede Zeile enthält eine durch Kommas 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 ZeitzoneEurope/Paris
, die AbkürzungCET
, mit einem 01:00:00
Offset von UTC. Damit f
wird angegeben, dass die Sommerzeit nicht eingehalten wird. Die zweite Zeile enthält die ZeitzoneIsrael
, AbkürzungIST
, mit einem 02:00:00
Offset von UTC, f
um anzuzeigen, dass die Sommerzeit nicht eingehalten wird.
pg_timezone_names
-----------------
(Europe/Paris,CET,01:00:00,f)
(Israel,IST,02: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 mithilfe eines Zeitzonennamens angeben, passt sich CONVERT_TIMEZONE automatisch an die Sommerzeit (DST) oder ein anderes lokales saisonales Protokoll an, wie Sommerzeit, Standardzeit oder Winterzeit, das für diese Zeitzone zu dem mit 'timestamp' angegebenen Datum und Uhrzeit gilt. So steht beispielsweise „Europe/London“ für UTC im Winter, im Sommer kommt eine Stunde dazu.
Verwendung einer Zeitzonenabkürzung
Führen Sie den folgenden Befehl aus, um eine aktuelle und vollständige Liste der Zeitzonenabkürzungen anzuzeigen.
select pg_timezone_abbrevs();
Die Ergebnisse enthalten eine durch Kommas 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 Standard Time PST
mit einem -08:00:00
Offset von UTC, f
um anzuzeigen, dass dort keine Sommerzeit eingehalten wird.
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 Abkürzung für eine Zeitzone angeben, verwendet CONVERT_TIMEZONE den festen Offset von UTC und passt sich nicht an lokale saisonale Protokolle an.
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)