Jag tror att manipulering av strängvärdet är den enklaste och enklaste lösningen, så jag kommer att presentera en alternativ lösning.
Från Oracle-dokumentationen för INTERVALL DAG TILL ANDRA datatyp
och från definitionen av kolumn START_TIME
i din fråga kan kolumnvärdena inte sträcka sig över mer än en dag och inte heller innehålla bråkdelar av sekunder.
Från Oracle JDBC-dokumentation
, datatypen INTERVAL DAY TO SECOND
mappar till java-klassen oracle.sql.INTERVALDS
. (Detta är en av klasserna i JAR-filen för Oracle JDBC-drivrutinen.)
Från javadoc
av klassen oracle.sql.INTERVALDS
:
Du vet att endast byte 4, 5 och 6 är relevanta på grund av definitionen av kolumn START_TIME
dvs noll dagar och noll bråkdelar av sekunder. Men eftersom du skrev i din fråga att du ignorerar sekunderna betyder det att bara byte 4 och 5 är relevanta. Därav koden för att hämta värdet från ResultSet
och att konvertera den till en sträng i önskat format är:
INTERVALDS intervalDS = (INTERVALDS) rs.getObject("START_TIME");
byte[] bytes = intervalDS.toBytes();
int hour = bytes[4] - 60;
int minute = bytes[5] - 60;
String result = String.format("%02d:%02d", hour, minute);