Ada sedikit kebingungan dalam pertanyaan Anda:
- sebuah
Date
tipe data tidak menyimpan komponen zona waktu. Informasi ini terpotong dan hilang selamanya saat Anda memasukkanTIMESTAMP WITH TIME ZONE
menjadiDate
. - Bila Anda ingin menampilkan tanggal, baik di layar atau mengirimnya ke sistem lain melalui API karakter (XML, file...), Anda menggunakan
TO_CHAR
fungsi. Di Oracle, sebuahDate
tidak memiliki format :ini adalah titik waktu. - Sebaliknya, Anda akan menggunakan
TO_TIMESTAMP_TZ
untuk mengonversiVARCHAR2
keTIMESTAMP
, tetapi ini tidak akan mengonversiDate
keTIMESTAMP
. - Anda menggunakan
FROM_TZ
untuk menambahkan informasi zona waktu keTIMESTAMP
(atauDate
). - Di Oracle,
CST
adalah zona waktu tetapiCDT
tidak.CDT
adalah informasi musim panas. - Untuk memperumit masalah lebih lanjut,
CST/CDT
(-05:00
) danCST/CST
(-06:00
) jelas akan memiliki nilai yang berbeda, tetapi zona waktuCST
akan 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