如何在java中从PostgreSQL转换时间间隔

如何在java中从PostgreSQL转换时间间隔,java,postgresql,intervals,Java,Postgresql,Intervals,我想从PostgreSQL中选择类型为interval的time\u interval列 并用Java代码转换为long类型 我的桌子是空的 trigger id time_interval cdate 1 01:00:00 2018-12-11 2 1 day 2018-12-11 3 1 month 2018-12-11 4 00:05:00 2018-12-11 Java代码是

我想从PostgreSQL中选择类型为
interval
time\u interval

并用Java代码转换为long类型

我的桌子是空的

  trigger
  id   time_interval  cdate 
  1     01:00:00      2018-12-11
  2     1 day         2018-12-11
  3     1 month       2018-12-11
  4     00:05:00      2018-12-11
Java代码是

   List<Long> results= executeQuery("select * from trigger limit 10",(rs,rowNum)->{

        Long time_interval = rs.getTimestamp("time_interval").getTime();

        return time_interval ;

    });

有一个特殊类型
org.postgresql.util.PGInterval
来处理postgresql
interval
s:

org.postgresql.util.PGInterval i =
    (org.postgresql.util.PGInterval) rs.getObject("time_interval");

// gives something like "1 years 0 mons 0 days 2 hours 0 mins 0.00 secs"
System.out.println(i);

// gives something like "2"
System.out.println(i.getHours());
我不知道您要从间隔计算的
long
值是多少,但是如果它是以毫秒为单位的长度,您可以这样进行:

java.util.Calendar cal = new java.util.GregorianCalendar();
cal.setTimeInMillis(0);
i.add(cal);
System.out.println(cal.getTimeInMillis());

如果仍希望间隔为长值,可以在SQL中将间隔转换为长值:

select id, extract(epoch from time_interval) as time_interval, cdate 
from trigger;

然后,您可以使用
ResultSet.getLong(“时间间隔”)
检索该值,而无需处理JDBC本机不支持的内容。

Postgresql中的间隔不是Java支持的格式,我见过一些人在PG时间间隔和Joda时间间隔之间玩杂耍,这可能是最接近你想要的。或者,您可以使用
SELECT EXTRACT(epoch FROM l_interval)/3600
将间隔转换为历元时间戳。另一个选项是尝试
getString()
,并创建一个智能解析器,该解析器将区分格式,并以您需要的类型返回值。这并不简单。在Java中表示时间间隔长度的最佳类可能是项目的
PeriodDuration
,因为Java没有适当的内置类型。正如@coladict所说,您可能需要编写自己的解析器。这里的问题也很好。希望这能弥补你在另一条上收到的负面反斜杠。。。
select id, extract(epoch from time_interval) as time_interval, cdate 
from trigger;