我有一个具有 startDateTime 字段的模型,该字段以 OffsetDateTime 格式存储 DateTime。
startDateTime: 2023-07-25T04:40:46.143-08:00
但是,当我们将上述对象存储在 GCP 上的 postgres SQL 数据库中时,它会以以下格式存储:
2023-07-25 12:40:46.143+00
看起来正在将上述对象调整为 UTC 时间。
但我的要求是,它应该以与对象中相同的格式存储,并且不应该调整到UTC时间。
我探索了here给出的方法,但没有一个方法满足我的要求。
有人可以建议是否有办法实现这一目标。任何帮助将不胜感激。
我使用并输入的代码是
startDateTime: 2023-07-25T12:40:46.143Z
和"timeZoneOffset": "UTC-08:00"
。我正在根据 timezoneOffset 值将输入转换为预期的 OffsetDateTime。
val actualDateTime: OffsetDateTime = OffsetDateTime.parse(startDateTime)
val zoneOffset: ZoneOffset = ZoneOffset.of(timeZoneOffset.replace("UTC", ""))
val expectedDateTime: OffsetDateTime = actualDateTime.withOffsetSameInstant(zoneOffset)
return expectedDateTime.toString()
DDL:
CREATE TABLE IF NOT EXISTS TRANSACTION
(
id uuid DEFAULT,
start_date_time TIMESTAMP WITH TIME ZONE NOT NULL,
end_date_time TIMESTAMP WITH TIME ZONE NOT NULL,
currency VARCHAR(5) NOT NULL,
country VARCHAR(50) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL,
created_by VARCHAR (255) NOT NULL,
startDateTime TIMESTAMP WITH TIME ZONE NOT NULL
)
您的最佳实践是将时区视为表示属性,并将时间戳本身视为时间瞬间。如果您的业务需要要求您保留输入字段的时区,那么您必须将其存储在时间戳之外的另一个字段中。
postgresql 使用“timestamp with timezone”类型仅解释输入字符串的时区偏移量。数据库不保留该时区数据。时间戳始终存储为 UTC,时区立即丢失。