H2DB i Java, przybliżona> dwie godziny rozbieżności

Opracowuję system pomiaru czasu wyścigu i dla kilku przypadków muszę pobrać obiekt czasu z H2DB. Podobnie jak jego bretheren (lub sisteren), typ danych czasu jest względny do 1 stycznia 1970 r. I jest wyrażony w języku SQL w formacie „hh: mm: ss”, przy czym data jest ustawiona domyślnie na 01-01-1970. Domyślnie jest odwzorowany na obiekt „java.sql.Time”. Jako zaufany padawan zakodowałem następujące elementy, aby oddzielić godziny od minut w celach wyświetlania.

 if(race.getCutOffTime()!=null){
    long cutOffHour=(race.getCutOffTime().getTime())/(3600000);
    int cutOffMinute=(int)(race.getCutOffTime().getTime()%(60*60*1000));
    System.out.println(cutOffHour+":"+cutOffMinute);
    }

Smażenie czasu w Javie pojawia się jednak, ponieważ funkcje te generują nieoczekiwane wartości, na przykład poniższa instrukcja z mojej bazy danych daje wynik 3:30.

INSERT INTO MagEye.Races(RaceName, EventID,CutOffTime) 
VALUES ('TEST', SELECT EventID FROM MagEye.Events 
WHERE EventName='Sabrina Love',TIME '5:50:00');

Zmiana tej instrukcji w celu odzwierciedlenia czasu „0: 0: 0” daje mi wartość „-2: 00” Co robię źle? Z góry dziękuję).

Edytować Zgodnie z żądaniem, oto mój kod do bazy danych:

Oświadczenie dotyczące tworzenia tabeli:

CREATE TABLE IF NOT EXISTS MagEye.Races (RaceID INT PRIMARY KEY AUTO_INCREMENT ,  RaceName VARCHAR(100) ,EventID INT, Description TEXT, MaxEntrants INT, MinAge INT, MaxAge INT, RacePrefix VARCHAR (5), TimingMethod CHAR(1), CutOffTime TIME, RaceEnd TIMESTAMP,Finished BOOLEAN DEFAULT FALSE, Autostart BOOLEAN, FOREIGN KEY(EventID) REFERENCES MagEye.Events(EventID));

Oświadczenie o wstawieniu:

INSERT INTO MagEye.Races(RaceName, EventID,CutOffTime) VALUES ('TEST', SELECT EventID FROM MagEye.Events WHERE EventName='Sabrina Love',TIME '5:50:00');

Wyszukiwanie:

raceDB.result = raceDB.state.executeQuery("SELECT * FROM MagEye.Races WHERE EventID=" + eventID + " ORDER BY RaceName");
            java.util.ArrayList<Race> races = new java.util.ArrayList<>();


            while (raceDB.result.next()) {
                Race thisRace;
                String timingMethodString = raceDB.result.getString("TimingMethod");
                Race.TimingMethod timingMethod = null;
                if (timingMethodString != null) {
                    timingMethod = Race.TimingMethod.valueOf(timingMethodString);
                } else {
                    timingMethod = Race.TimingMethod.MANUAL;
                }
                thisRace = new Race(raceDB.result.getInt("RaceID"), event, raceDB.result.getString("RaceName"), raceDB.result.getString("Description"), raceDB.result.getInt("MaxEntrants"), raceDB.result.getInt("MinAge"), raceDB.result.getInt("MaxAge"), raceDB.result.getString("RacePrefix"), timingMethod,(raceDB.result.getTime("CutOffTime")), raceDB.result.getBoolean("Autostart"));
thisRace = new Race(raceDB.result.getInt("RaceID"), event, raceDB.result.getString("RaceName"), raceDB.result.getString("Description"), raceDB.result.getInt("MaxEntrants"), raceDB.result.getInt("MinAge"), raceDB.result.getInt("MaxAge"), raceDB.result.getString("RacePrefix"), timingMethod,(raceDB.result.getTime("CutOffTime")), raceDB.result.getBoolean("Autostart"));

Pokaz:

if(race.getCutOffTime()!=null){
    long cutOffHour=(int)(race.getCutOffTime().getTime())/(3600000);
    RacesCutOffLength.setText(cutOffHour+"");      
    int cutOffMinute=(int)(race.getCutOffTime().getTime()%(60*60*1000));
    this.RacesMinutes.setText(cutOffMinute+"");
    }
    else{
        RacesCutOffLength.setText("0");      
        RacesMinutes.setText("0");      
    }

Edytować: Zdecydowałem się zastąpić obiekt Time długim prymitywem

questionAnswers(1)

yourAnswerToTheQuestion