我正在使用下面列的oracle数据库 START_TIME INTERVAL DAY(0) TO SECOND(0)
我在java代码中使用jdbc模板,使用行Map器和getstring()方法访问这个值,如下所示:(我运行一个基本的select查询,从db中获取值)
String startTime = rs.getString("START_TIME");
我得到的值是这个格式
System.out.println(startTime); // 0 9:30:0.0
我无法将此值格式化为hh:mm格式字符串。我不需要秒,因为我忽略了这个值。所以我想要的是这样的09:30
发现这个看起来很相似,但我使用的是swagger开放api基于yaml的dto生成,不知道如何才能实现这一点。另外,我没有使用hibernate。它是普通的jdbc模板。
编辑:观察到当我 +00 11:00:00.000000
在数据库中 rs.getString("START_TIME")
获取 0 11:0:0.0
什么时候 +00 09:30:00.000000
它吸引人 0 9:30:0.0
但我的要求是 11:00
以及 09:30
. 希望这能多帮点忙。
2条答案
按热度按时间8iwquhpp1#
我相信操纵字符串值是最简单的解决方案,因此我将提供一个替代解决方案。
从oracle文档中的间隔日到第二个数据类型和列的定义
START_TIME
在您的问题中,列值不能跨越一天以上,也不能包含小数秒。在oraclejdbc文档中,数据类型
INTERVAL DAY TO SECOND
Map到java类oracle.sql.INTERVALDS
. (这是oraclejdbc驱动程序jar文件中的一个类。)从类的javadoc
oracle.sql.INTERVALDS
:该对象的内部数据以11字节数组的形式存储在超类的存储区域中。字节排列如下:
因为列的定义,所以只有字节4、5和6是相关的
START_TIME
,即零天零分秒。但既然你在问题中写到忽略秒数,那就意味着只有字节4和字节5是相关的。因此,从ResultSet
将其转换为所需格式的字符串是:sycxhyv72#
查找从第一个空格字符到第二个空格字符之间的子字符串
:
冒号字符,并用零填充它,使其长度为5个字符。