Saya baru-baru ini menemukan bahwa tergantung pada driver database yang digunakan, jOOQ dapat menunjukkan beberapa perilaku aneh dalam penguraian DateTime. jOOQ mengembalikan waktu tanggal offset sebagai Z (UTC) meskipun tidak
Secara khusus, dalam kasus saya, menggunakan driver Postgres yang berbeda mengakibatkan DefaultBinding.java menerima objek kalender yang memiliki stempel waktu, tetapi memanggil toString untuk menguraikannya. Ternyata, toString tidak mencetak zona waktu, lalu jOOQ menyimpulkan bahwa itu dalam waktu lokal.
Bagi saya, baris yang menyinggung di DefaultBinding.java (saya menggunakan stempel waktu dengan zona waktu) adalah:
else if (type == OffsetDateTime.class) {
result = (T) offsetDateTime(ctx.resultSet().getString(ctx.index()));
}
Anda mungkin berada di baris yang berbeda dalam rangkaian ifs lain tersebut berdasarkan tidak memiliki zona waktu.
Dalam pengujian saya, saya juga menemukan bahwa mengubah waktu sistem mengubah hasil, tetapi mengubah waktu sesi tidak menghasilkan apa-apa.
Untungnya bagi saya, beralih ke driver Postgres standar menyelesaikan masalah. Jika tidak, saya akan melihat kelebihan pengikatan untuk OffsetDateTime untuk memperbaiki penggunaan toString dan itu terkait pengupasan zona waktu yang relevan. Sayangnya, Anda mungkin perlu mengikuti jalur itu, kecuali jika Anda juga menggunakan driver SQL yang dapat ditingkatkan atau diganti. Atau, Anda bisa menyimpannya dengan zona waktu dan kemudian mengonversinya ke zona waktu yang diinginkan saat Anda memuat dari database.