Vấn đề là Java Date
các đối tượng không lưu trữ một múi giờ. Giá trị là luôn luôn theo UTC và được phân tích cú pháp và định dạng trong một múi giờ nhất định, thường là múi giờ mặc định của JVM.
Oracle DATE
các cột cũng được lưu trữ mà không có múi giờ, nhưng phải đại diện cho ngày mà người dùng nhìn thấy. Trong 99,99% trường hợp, điều đó có nghĩa là ngày trong múi giờ mặc định của JVM.
Vì vậy, trình điều khiển JDBC lấy Timestamp
/ Date
giá trị theo UTC, chuyển đổi nó thành múi giờ mặc định và lưu nó vào cơ sở dữ liệu.
Bạn đang sử dụng PreparedStatement.setTimestamp(int parameterIndex, Timestamp x)
phương pháp. Để kiểm soát múi giờ, hãy sử dụng PreparedStatement.setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
phương pháp. Trích dẫn javadoc: