java 如何从 PostgreSQL 转换时间间隔
How to convert time interval from PostgreSQL in java
我想select来自PostgreSQL的interval
类型的time_interval
列。
并使用 Java 代码转换为 long 类型
我的table是
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 ;
});
我的错误是
nested exception is
org.postgresql.util.PSQLException: Bad value for type timestamp/date/time: {1}
有特殊类型 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("time_interval")
检索该值,而无需处理 JDBC 本身不支持的内容。
我想select来自PostgreSQL的interval
类型的time_interval
列。
并使用 Java 代码转换为 long 类型
我的table是
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 ;
});
我的错误是
nested exception is
org.postgresql.util.PSQLException: Bad value for type timestamp/date/time: {1}
有特殊类型 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("time_interval")
检索该值,而无需处理 JDBC 本身不支持的内容。