Ihre Frage ist etwas verwirrend:
- ein
Date
datatype speichert die Zeitzonenkomponente nicht. Diese Information wird abgeschnitten und geht für immer verloren, wenn Sie einenTIMESTAMP WITH TIME ZONE
einfügen in einDate
. - Wenn Sie ein Datum anzeigen möchten, entweder auf dem Bildschirm oder um es über eine Zeichen-API (XML, Datei...) an ein anderes System zu senden, verwenden Sie den
TO_CHAR
Funktion. In Oracle einDate
hat kein Format :es ist ein Zeitpunkt. - Umgekehrt würden Sie
TO_TIMESTAMP_TZ
verwenden zum Konvertieren einesVARCHAR2
zu einemTIMESTAMP
, aber das konvertiert keinDate
zu einemTIMESTAMP
. - Sie verwenden
FROM_TZ
um die Zeitzoneninformationen zu einemTIMESTAMP
hinzuzufügen (oder einDate
). - In Oracle,
CST
ist eine Zeitzone, aberCDT
ist nicht.CDT
ist eine Sommerzeitinformation. - Um die Sache noch komplizierter zu machen,
CST/CDT
(-05:00
) undCST/CST
(-06:00
) wird offensichtlich andere Werte haben, aber die ZeitzoneCST
erbt standardmäßig die Sommerzeitinformationen abhängig vom Datum.
Ihre Konvertierung ist also möglicherweise nicht so einfach, wie sie aussieht.
Angenommen, Sie möchten ein Date
konvertieren d
von der Sie wissen, dass sie in der Zeitzone CST/CST
gültig ist zum Äquivalent in der Zeitzone CST/CDT
, würden Sie verwenden:
SQL> SELECT from_tz(d, '-06:00') initial_ts,
2 from_tz(d, '-06:00') at time zone ('-05:00') converted_ts
3 FROM (SELECT cast(to_date('2012-10-09 01:10:21',
4 'yyyy-mm-dd hh24:mi:ss') as timestamp) d
5 FROM dual);
INITIAL_TS CONVERTED_TS
------------------------------- -------------------------------
09/10/12 01:10:21,000000 -06:00 09/10/12 02:10:21,000000 -05:00
Hier wurde mein Standard-Zeitstempelformat verwendet. Ich kann ein Format explizit angeben:
SQL> SELECT to_char(from_tz(d, '-06:00'),'yyyy-mm-dd hh24:mi:ss TZR') initial_ts,
2 to_char(from_tz(d, '-06:00') at time zone ('-05:00'),
3 'yyyy-mm-dd hh24:mi:ss TZR') converted_ts
4 FROM (SELECT cast(to_date('2012-10-09 01:10:21',
5 'yyyy-mm-dd hh24:mi:ss') as timestamp) d
6 FROM dual);
INITIAL_TS CONVERTED_TS
------------------------------- -------------------------------
2012-10-09 01:10:21 -06:00 2012-10-09 02:10:21 -05:00