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