Наскоро открих, че в зависимост от използвания драйвер на базата данни, 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()));
}
Може да сте на различен ред в тази поредица от else if въз основа на липсата на часова зона.
При моето тестване открих също, че промяната на системното време променя резултата, но промяната на времето на сесията не направи нищо.
За мое щастие, преминаването към стандартния драйвер на Postgres реши проблема. Ако не беше, щях да търся претоварване на обвързването за OffsetDateTime, за да коригирам използването на toString и свързаното с него премахване на съответната часова зона. Може да се наложи да продължите по този път, за съжаление, освен ако и вие не използвате SQL драйвер, който може да бъде надстроен или заменен. Или можете да го съхраните с часова зона и след това да конвертирате в желаната часова зона, когато зареждате от базата данни.