如何在java中从PostgreSQL转换时间间隔
我想从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代码是
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
来处理postgresqlinterval
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;