Er is een beetje verwarring in uw vraag:
- een
Date
datatype slaat de tijdzonecomponent niet op. Dit stukje informatie wordt afgekapt en gaat voor altijd verloren wanneer u eenTIMESTAMP WITH TIME ZONE
invoegt 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_CHAR
functie. In Oracle, eenDate
heeft geen formaat :het is een tijdstip. - Omgekeerd zou je
TO_TIMESTAMP_TZ
. gebruiken om een VARCHAR2
. te converteren naar eenTIMESTAMP
, maar dit converteert geenDate
naar eenTIMESTAMP
. - U gebruikt
FROM_TZ
om de tijdzone-informatie toe te voegen aan eenTIMESTAMP
(of eenDate
). - In Oracle,
CST
is een tijdzone maarCDT
is niet.CDT
is 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 tijdzoneCST
zal 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