Masalahnya adalah Java Date
objek tidak menyimpan zona waktu. Nilainya selalu dalam UTC, dan diuraikan serta diformat dalam zona waktu tertentu, biasanya zona waktu default JVM.
Oracle DATE
kolom juga disimpan tanpa zona waktu, tetapi harus mewakili tanggal seperti yang terlihat oleh pengguna. Dalam 99,99% kasus, itu berarti tanggal dalam zona waktu default JVM.
Jadi, driver JDBC mengambil Timestamp
/ Date
nilai, yang ada di UTC, mengonversinya ke zona waktu default, dan menyimpannya ke database.
Anda menggunakan PreparedStatement.setTimestamp(int parameterIndex, Timestamp x)
metode. Untuk mengontrol zona waktu, gunakan PreparedStatement.setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
metode. Mengutip javadoc: