設定:
休眠:5.4.32
SpringBoot:2.5.4
org.postgresql:postgresql:42.2.23
我有一個班級和一張桌子
@Entity
public class MyType{
@Id
@GeneratedValue(generator = "uuid2")
@Type(type = "uuid-char")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
private UUID id;
@Column
public ZonedDateTime time;
public MyType(){}
// omitting getters and setters
}
create table if not exists my_type
(
id text not null
constraint idx_16559_pk__data_fil__3213e83ff1283b3a
primary key,
time timestamp with time zone
)
問題
我想要實作的是在MyType.time寫入資料庫時保留時區資訊。無論我嘗試什么,它總是轉換為 UTC。有一個選項 ( hibernate.jdbc.time_zone) 來設定特定的時區,但我想保留ZonedDateTime具有不同時區的實體,并且由于 Java 和 Postgres 有一個型別,我希望有一些方法可以實作這一點。
對我來說最壞的情況是將其存盤為字串并手動進行反/序列化。
uj5u.com熱心網友回復:
在 Postgres 中,aTIMESTAMP WITH TIME ZONE實際上以 UTC 格式將其日期存盤在資料庫中。
“帶時區”意味著它希望在插入時指定一個時區,并將指定的時間轉換為 UTC。通過這樣做,它可以標準化所有時間戳,如果您想比較或排序日期,這很有意義。
因此,資料庫不會存盤時區,您將需要另一種方式來存盤或確定它。
所有時區感知日期和時間都以 UTC 內部存盤。(PostgreSQL 檔案)
您可以將時區視為用戶的一種“格式”。每個用戶都可以有自己的時區,然后應該以不同的方式格式化相同的日期。它仍然是相同的值,只是以不同的方式顯示。
從這方面來看,僅在用戶的設定或組態檔中存盤時區可能是有意義的。
在我看來,這種格式化甚至不應該由 API 來完成。它應該由前端完成。如果用戶沒有在其用戶首選項中設定時區,您實際上可以使用客戶端作業系統的時區或網路瀏覽器的時區。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/331672.html
標籤:爪哇 PostgreSQL 休眠
下一篇:psql:錯誤:連接到套接字“/var/run/postgresql/.s.PGSQL.5432”上的服務器失敗:致命:用戶“postgres”的對等身份驗證失敗(Ubuntu)
