Ada sedikit kebingungan dalam pertanyaan Anda:
- sebuah
Datetipe data tidak menyimpan komponen zona waktu. Informasi ini terpotong dan hilang selamanya saat Anda memasukkanTIMESTAMP WITH TIME ZONEmenjadiDate. - Bila Anda ingin menampilkan tanggal, baik di layar atau mengirimnya ke sistem lain melalui API karakter (XML, file...), Anda menggunakan
TO_CHARfungsi. Di Oracle, sebuahDatetidak memiliki format :ini adalah titik waktu. - Sebaliknya, Anda akan menggunakan
TO_TIMESTAMP_TZuntuk mengonversiVARCHAR2keTIMESTAMP, tetapi ini tidak akan mengonversiDatekeTIMESTAMP. - Anda menggunakan
FROM_TZuntuk menambahkan informasi zona waktu keTIMESTAMP(atauDate). - Di Oracle,
CSTadalah zona waktu tetapiCDTtidak.CDTadalah informasi musim panas. - Untuk memperumit masalah lebih lanjut,
CST/CDT(-05:00) danCST/CST(-06:00) jelas akan memiliki nilai yang berbeda, tetapi zona waktuCSTakan mewarisi informasi waktu musim panas tergantung pada tanggal secara default.
Jadi konversi Anda mungkin tidak sesederhana kelihatannya.
Dengan asumsi Anda ingin mengonversi Date d yang Anda tahu valid pada zona waktu CST/CST setara dengan zona waktu CST/CDT , Anda akan menggunakan:
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
Format stempel waktu default saya telah digunakan di sini. Saya dapat menentukan format secara eksplisit:
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