Er is een beetje verwarring in uw vraag:
- een
Datedatatype slaat de tijdzonecomponent niet op. Dit stukje informatie wordt afgekapt en gaat voor altijd verloren wanneer u eenTIMESTAMP WITH TIME ZONEinvoegt in eenDate. - Als u een datum wilt weergeven, hetzij op het scherm, hetzij via een teken-API (XML, bestand...), naar een ander systeem wilt verzenden, gebruikt u de
TO_CHARfunctie. In Oracle, eenDateheeft geen formaat :het is een tijdstip. - Omgekeerd zou je
TO_TIMESTAMP_TZ. gebruiken om een VARCHAR2. te converteren naar eenTIMESTAMP, maar dit converteert geenDatenaar eenTIMESTAMP. - U gebruikt
FROM_TZom de tijdzone-informatie toe te voegen aan eenTIMESTAMP(of eenDate). - In Oracle,
CSTis een tijdzone maarCDTis niet.CDTis informatie over zomertijd. - Om de zaken nog ingewikkelder te maken,
CST/CDT(-05:00) enCST/CST(-06:00) zal uiteraard verschillende waarden hebben, maar de tijdzoneCSTzal standaard de informatie over de zomertijd erven, afhankelijk van de datum.
Uw conversie is dus misschien niet zo eenvoudig als het lijkt.
Ervan uitgaande dat u een Date . wilt converteren d waarvan u weet dat deze geldig is in tijdzone CST/CST naar het equivalent in tijdzone CST/CDT , zou je gebruiken:
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
Mijn standaard tijdstempelformaat is hier gebruikt. Ik kan expliciet een formaat specificeren:
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