Apabila menggunakan java.sql.Timestamp untuk menyimpan dan mendapatkan cap masa dalam pangkalan data, adalah penting untuk mempertimbangkan kesan zon waktu pada data.
Secara lalai, jika objek Timestamp ditetapkan menggunakan setTimestamp(int, Timestamp) tanpa menyatakan objek Kalendar, pemacu JDBC menggunakan zon masa mesin maya yang menjalankan aplikasi. Ini menunjukkan bahawa cap masa yang disimpan dalam pangkalan data mungkin tidak menggambarkan zon waktu yang dimaksudkan.
Untuk memastikan cap masa UTC disimpan dengan betul dalam pangkalan data, objek Kalendar mesti disediakan untuk setTimestamp(int, Timestamp, Calendar) dengan zon waktu yang dikehendaki. Untuk UTC, ini boleh dicapai seperti berikut:
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); stmt.setTimestamp(11, tsSchedStartTime, cal);
Dengan mengabaikan pertimbangan zon waktu, kod yang diberikan menyimpan cap waktu UTC sebagai cap waktu setempat secara tidak betul. Ini boleh membawa kepada percanggahan apabila mendapatkan semula data daripada pangkalan data, kerana ia akan ditafsirkan berdasarkan zon waktu aplikasi semasa.
The Kaedah timestamp.toString(), serupa dengan java.util.Date, mencetak cap waktu berdasarkan zon waktu tempatan mesin maya. Ia tidak menggambarkan zon masa bagi nilai yang disimpan.
JDBC 4.2 memperkenalkan sokongan untuk java.time.LocalDateTime dan java.time.LocalTime untuk jenis data TIMESTAMP dan TIME . Kelas ini bersifat agnostik zon waktu, menghapuskan keperluan untuk penukaran zon waktu yang jelas.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Zon Masa Dengan Betul Apabila Menggunakan java.sql.Timestamp dengan JDBC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!