Tôi tin rằng thao tác với giá trị chuỗi là giải pháp dễ dàng và đơn giản nhất, vì vậy tôi sẽ trình bày một giải pháp thay thế.
Từ tài liệu Oracle cho Kiểu dữ liệu INTERVAL DAY TO SECOND
và từ định nghĩa của cột START_TIME
trong câu hỏi của bạn, các giá trị cột không được kéo dài hơn một ngày cũng như không được chứa giây phân số.
Từ Oracle Tài liệu JDBC
, kiểu dữ liệu INTERVAL DAY TO SECOND
ánh xạ tới lớp java oracle.sql.INTERVALDS
. (Đây là một trong các lớp trong tệp JAR trình điều khiển Oracle JDBC.)
Từ javadoc
của lớp oracle.sql.INTERVALDS
:
Bạn biết rằng chỉ các byte 4, 5 và 6 là có liên quan do định nghĩa của cột START_TIME
, tức là không ngày và không giây phân số. Nhưng vì bạn đã viết trong câu hỏi của mình rằng bạn đang bỏ qua giây, điều đó có nghĩa là chỉ byte 4 và 5 là có liên quan. Do đó, mã để truy xuất giá trị từ ResultSet
và chuyển đổi nó thành một chuỗi ở định dạng mong muốn của bạn là:
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);