【问题标题】:How to convert PostgreSQL timestamp with time zone to Java Instant or OffSetDateTime?如何将带有时区的 PostgreSQL 时间戳转换为 Java Instant 或 OffSetDateTime?
【发布时间】: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 的建议去做,但如果您因为坚持解析解决方案而拒绝这样做,请定义一个合适的模式并将数据库列值解析为OffsetDateTime by OffsetDateTime 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


【解决方案1】:

拆分范围类型值

tstzrange 是 Postgres 中的 range type

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

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 拯救了我的一天并学会了拆分范围数据类型。

【讨论】:

  • 很好、简洁且内容丰富的答案。直到。谢谢。
  • 准确!不要忘记接受它,以便将来的访问者也可以放心地使用该解决方案。
猜你喜欢
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 2023-03-28
  • 2018-12-18
  • 1970-01-01
  • 2019-10-07
相关资源
最近更新 更多