Java 8 从Postgres tstz字段获取原始时区
我有一张这样的桌子Java 8 从Postgres tstz字段获取原始时区,java-8,postgresql-9.5,Java 8,Postgresql 9.5,我有一张这样的桌子 CREATE TABLE tstz ( ts timestamp NULL, tstz timestamptz NULL, seq text NULL ); 每当我将时间戳与时区一起存储时,它就会转换为数据库的时区。如何取回取回的原始时区 例如,我正在将类似2020-04-29T08:06:03.424689+05:30的时区存储到数据库中。但是,当我使用Java读取数据库并再次读取时区时,如下所示 Optional<Tstz> tst
CREATE TABLE tstz (
ts timestamp NULL,
tstz timestamptz NULL,
seq text NULL
);
每当我将时间戳与时区一起存储时,它就会转换为数据库的时区。如何取回取回的原始时区
例如,我正在将类似2020-04-29T08:06:03.424689+05:30的时区存储到数据库中。但是,当我使用Java读取数据库并再次读取时区时,如下所示
Optional<Tstz> tstzOptionalSaved = tstzRepository.findById(tstz.getSeq());
Tstz tstzSaved = tstzOptionalSaved.get();
log.info("Timezone {}" , tstzSaved.getTstz().getZone().getId());
Optional tstzOptionalSaved=tstzRepository.findById(tstz.getSeq());
Tstz tstzSaved=tstzOptionalSaved.get();
log.info(“时区{}”,tstzSaved.getstz().getZone().getId());
上面的代码总是返回UTC,UTC是数据库的时区
有没有办法在Postgres或Java中实现这一点?您可以使用
OffsetDateTime
。从
所有OffsetDateTime实例必须使用UTC(偏移量为0)。这是因为后端将它们存储为UTC
因此,您需要为偏移量添加一列,然后使用偏移量获取原始值
OffsetDateTime tstz = rs.getObject("tstz", OffsetDateTime.class);
OffsetDateTime odtOriginal = tstz
.toInstant()
.atOffset(ZoneOffset.ofTotalSeconds(rs.getInt("tstz_offset")));
// 2020-04-29T08:06:03.424689+05:30
原始时区不存储在该区域中value@a_horse_with_no_name我们无法做到这一点?您无法检索未存储的信息您使用哪种数据类型来映射域类中的列
Tstz
?