2

如何将带有时区的 PostgreSQL 时间戳转换为 Java Instant 或 OffSetDateTime?

具有时区格式的 PostgreSQL 时间戳:2020-06-18 16:15:38+05:30

在 Java 11.7 中获得以下异常 - Ubuntu forInstant.parse("2020-06-18 16:15:38+05:30".replace(" ", "T"))

Exception in thread "main" java.time.format.DateTimeParseException: Text '2020-06-18T16:15:38+05:30' could not be parsed at index 19
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
at java.base/java.time.Instant.parse(Instant.java:395)
at OffSetDateTimeExample.main(OffSetDateTimeExample.java:9)

但它适用于 Java 13。

使其在 Java 11 中工作的任何帮助

4

1 回答 1

4

拆分范围类型值

tstzrange是 Postgres 中的范围类型

tstzrange通过调用lower andupper函数在查询中拆分 PostgreSQL 。

select 
    *, 
    lower(tstzrange) as lower_tstzrange, 
    upper(tstzrange) as upper_tstzrange 
from announcement
;

并将其Resultset用作OffsetDateTime

TstzRange.builder()
    .startDateTime(rs.getObject("lower_tstzrange", OffsetDateTime.class))
    .endDateTime(rs.getObject("upper_tstzrange", OffsetDateTime.class))
            .build()

感谢a_horse_with_no_nameArvind Kumar Avinash为我节省了一天并学习了拆分范围数据类型。

于 2020-06-26T12:48:24.683 回答