Ihre Frage ist etwas verwirrend:
- ein
Datedatatype speichert die Zeitzonenkomponente nicht. Diese Information wird abgeschnitten und geht für immer verloren, wenn Sie einenTIMESTAMP WITH TIME ZONEeinfü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_CHARFunktion. In Oracle einDatehat kein Format :es ist ein Zeitpunkt. - Umgekehrt würden Sie
TO_TIMESTAMP_TZverwenden zum Konvertieren einesVARCHAR2zu einemTIMESTAMP, aber das konvertiert keinDatezu einemTIMESTAMP. - Sie verwenden
FROM_TZum die Zeitzoneninformationen zu einemTIMESTAMPhinzuzufügen (oder einDate). - In Oracle,
CSTist eine Zeitzone, aberCDTist nicht.CDTist eine Sommerzeitinformation. - Um die Sache noch komplizierter zu machen,
CST/CDT(-05:00) undCST/CST(-06:00) wird offensichtlich andere Werte haben, aber die ZeitzoneCSTerbt 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