【发布时间】:2020-10-17 00:44:36
【问题描述】:
如何将带有时区的 PostgreSQL 时间戳转换为 Java Instant 或 OffSetDateTime?
带有时区格式的PostgreSQL时间戳:2020-06-18 16:15:38+05:30
在 Java 11.7 中出现以下异常 - Ubuntu for Instant.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 中运行
【问题讨论】:
-
不要解析它。使用
ResultSet.getObject(..., OffsetDateTime.class) -
按照@a_horse_with_no_name 的建议去做,但如果您因为坚持解析解决方案而拒绝这样做,请定义一个合适的模式并将数据库列值解析为
OffsetDateTimebyOffsetDateTime odt = OffsetDateTime.parse("2020-06-18 16:15:38+05:30", DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ssxxx"));。 -
在数据库中,我有“tstzrange”。
-
这是一个范围类型,而不是
timestamp with time zone。可能最简单的检索方法是使用select lower(..), upper(...)将范围的两个边缘作为两个单独的列。然后在每个人上使用getObject(..., OffsetDateTime.class)。 -
这能回答你的问题吗? Postgres - split TSTZRANGE in two columns
标签: java postgresql datetime jdbc timestamp-with-timezone