最近、使用しているデータベースドライバーによっては、jOOQがDateTime解析で奇妙な動作を示す可能性があることを発見しました。 jOOQは、オフセット日時をZ(UTC)として返しますが、そうではありません
具体的には、私の場合、別のPostgresドライバーを使用すると、DefaultBinding.javaはタイムスタンプを持つカレンダーオブジェクトを受け取りますが、解析するためにtoStringを呼び出します。結局、toStringはタイムゾーンを出力せず、jOOQはそれが現地時間であると推測しました。
私にとって、DefaultBinding.javaの問題のある行(タイムゾーン付きのタイムスタンプを使用していました)は次のとおりです。
else if (type == OffsetDateTime.class) {
result = (T) offsetDateTime(ctx.resultSet().getString(ctx.index()));
}
タイムゾーンがないことに基づいて、他の一連のifの別の行にいる可能性があります。
私のテストでは、システム時間を変更すると結果が変わることもわかりましたが、セッション時間を変更しても何も起こりませんでした。
私にとって幸いなことに、標準のPostgresドライバーに切り替えることで問題は解決しました。そうでない場合は、OffsetDateTimeのバインディングをオーバーロードして、toStringの使用と、それに関連する関連するタイムゾーンの削除を修正することを検討しました。残念ながら、アップグレードまたは置換できるSQLドライバーを使用していない限り、そのパスを追求する必要があるかもしれません。または、タイムゾーンを指定して保存し、データベースからロードするときに目的のタイムゾーンに変換することもできます。