Datum Zeitdifferenz in Stunden umrechnen

mwlltr

Neues Mitglied
Hallo zusammen,

ich habe angefangen mir ein kleines Programm für meine Arbeitszeit zu schreiben.
Ich erfasse meinen Arbeitsbeginn, meinen Pausenbeginn, meine Pausendauer und ob ich meine Pause im Haupthaus gemacht habe.
Als Ziel möchte ich das Arbeitsende angezeigt bekommen.

Mein Problem ist nun folgendes, rechne ich die Differenz der stunden aus kommt immer ein Wert raus, der um 2 zu klein ist. Woher kann das kommen?

Java:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.

*/
package worktimer_test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import static java.util.Date.parse;

/**
*
* @author mwlltr
*/
public class Worktimer {
boolean bool_haupthaus;
String str_pausenbeginn;
Date dat_pausenbeginn;
String str_pausenende;
Date dat_pausenende;
String str_arbeitsbeginn;
Date dat_arbeitsbeginn;
String str_arbeitszeit;
Date dat_arbeitszeit;
String str_arbeitsende;
Date dat_arbeitsende;
       
    public static void main (String[] args) throws ParseException{
       Worktimer test = new Worktimer();
       test.dat_arbeitszeit = test.timeconverter(test.str_arbeitszeit);
       test.dat_arbeitsbeginn = test.timeconverter(test.str_arbeitsbeginn);
       test.dat_pausenbeginn = test.timeconverter(test.str_pausenbeginn);
       test.dat_pausenende = test.timeconverter(test.str_pausenende);
       System.out.println(test.dat_arbeitszeit);
       System.out.println(test.dat_arbeitsbeginn);
       System.out.println(test.arbeitsende_ermitteln(test.dat_arbeitsbeginn, test.dat_pausenbeginn, test.dat_pausenende, test.dat_arbeitszeit, test.bool_haupthaus));
      
    //WorktimerGUI.main(args);
    }

    public Worktimer() {
        this.str_arbeitszeit = "08:06";
        this.str_arbeitsbeginn = "07:05";
        this.str_pausenbeginn = "12:00";
        this.str_pausenende = "12:45";
        this.bool_haupthaus = true;
    }
   
public Date timeconverter (String str_zeit ) throws ParseException{
    Date date_zeit;
    SimpleDateFormat sdf_zeit = new SimpleDateFormat ("HH:mm");
    date_zeit = sdf_zeit.parse(str_zeit);
    return date_zeit;
}

public long arbeitsende_ermitteln (Date arbeitsbeginn, Date pausenbeginn, Date pausenende,Date arbeitszeit, boolean haupthaus){
    Date arbeitsende;
    long diff ;
    long diff_stunde;
    long diff_minute;
       
    if (haupthaus == true) {
    diff = (arbeitsbeginn.getTime() + arbeitszeit.getTime()) /1000; // - (pausenende.getTime() - pausenbeginn.getTime());
    //stunden
    diff_stunde = diff/3600;
    diff_minute = diff/60 - (diff_stunde*60);
           return diff_stunde;
    }
     diff = arbeitsbeginn.getTime() + arbeitszeit.getTime(); //- (pausenende.getTime() - pausenbeginn.getTime());
    return diff;
}
}

Habt ihr eine Idee woher diese Abweichung kommt?
Die Minuten kann ich mir korrekt ausweisen lassen.

Gruß
rob
 
Du verwendest schon mal long, dabei handelt es sich um einen ganzzahligen Datentyp.
Damit verlierst du bei der Division schon mal Genauigkeit 😉
 
Hallo Joose,

vielen Dank für den Hinweis.
Da ich nur mit Uhrzeiten arbeite ist das Datum auf 1970 gesetzt.
Würde ich mit einem aktuellen Datum arbeiten, wäre die Zahl der milisekunden ja noch deutlich größer und dadurch würde eine noch höhere Ungenauigkeit entsehen.
Wo ist der Sinn , wenn ich es aufgrund von Ungenauigkeit nicht verwenden kann?

Gruß
rob
 
Ich glaube, das Problem ist hier die Differenz von einer Stunde zwischen GMT und CET (1.01.1970 war ja keine Sommerzeit). getTime liefert die Millisekunden seit 01.01.1970 GMT. Statt 8:06 + 7:05 wird deshalb 7:06 + 6:05 gerechnet, also 13 Stunden.
 
Zuletzt bearbeitet:

Zurück
Oben