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: