2 回答

TA貢獻1895條經驗 獲得超3個贊
這不是 jOOQ 問題。PostgreSQL 沒有與ZonedDateTime
.?它的TIMESTAMPTZ
orTIMESTAMP WITH TIME ZONE
類型實際上只是一個java.time.Instant
.?
對于帶時區的時間戳,內部存儲的值始終采用 UTC(通用協調時間,傳統上稱為格林威治標準時間,GMT)。指定了顯式時區的輸入值將使用該時區的適當偏移量轉換為 UTC。如果輸入字符串中未指定時區,則假定其處于系統 TimeZone 參數指示的時區,并使用時區的偏移量將其轉換為 UTC。
jOOQ 無法為您做任何事。
請注意,jOOQ 默認將TIMESTAMP WITH TIME ZONE
所有 SQL 數據庫中的類型映射到java.time.OffsetDateTime
,因為這就是 JDBC 規范的作用。對于像 JDBC(和 jOOQ)這樣的供應商無關的 API,這是一個合理的默認值。但如果您想擁有 PostgreSQL 原生行為,我建議您將所有TIMESTAMPTZ
類型重寫為INSTANT
(如果您使用的是 jOOQ 3.12+)。
如果由于某種原因,您需要維護此信息,則需要將其存儲在單獨的列中,或text
作為格式化值存儲在列中。

TA貢獻1859條經驗 獲得超6個贊
impossibl pgjdbc 驅動程序版本 0.7.1 和 jOOQ 之間存在不兼容性,導致在從 postgres 數據庫中選擇帶時區的時間戳時不應用偏移量。
萬一其他人也在運行這個 jar 組合,如果 impossibl 驅動程序中的功能是必要的,建議更新到 pgjdbc 0.8.2,如果不需要,則放棄。
添加回答
舉報