Arbeitsstunden berechnen

Status
Nicht offen für weitere Antworten.

tfo

Mitglied
Hallo,

ich bin gerade dabei Arbeitsstunden auszuwerten. Die Daten kommen aus einer DB und ich hole mir aus dem ResultSet zwei Time-Objekte die ich dann voneinander abziehe um die Anzahl der Stunden zu bekommen, die gearbeitet wurden! Das realisiere ich mit der Methode "getTime()" die mir jeweils einen Millisekunden-Wert vom Typ Long wieder gibt. Nach der Subtraktion der beiden Werte übergebe ich die Differenenz der beiden Werte einem neuen Time-Objekt der mit diesem Wert erstellt/initialisiert wird!

Zu Testzwecken habe ich folgende Werte genommen: (Uhrzeit und dann der zugehörige Millisekunden-Wert)

14:30:00 -- 48600000
07:30:00 -- 23400000
Differenz = 25200000

Zeitspanne wären 7 Stunden aber er rechnet warum auch immer eine Stunde mehr!
Und das ist der Fehler worum es geht. Egal welche Uhrzeiten es sind, es ist immer eine Stunde zu viel! Hat jemand eine Idee woran es liegt bzw. erkennt einen Fehler? Wenn es einen anderen Lösungsweg gibt, nehme ich den auch dankend an!

Hier noch zum Schluss der Code-Auszug:

Code:
Time time1 = result.getTime("DatumZeitEnde");
Time time2 = result.getTime("DatumZeitStart");
long diff = (time1.getTime()) - (time2.getTime());
Time resultTime = new Time(diff);

Würde mich über Antworten sehr freuen und Danke schon mal im Voraus 🙂
 
Vielen Dank erstmal für den Link!

Habe es jetzt wie folgt umgesetzt:

Code:
Calendar time1 = new GregorianCalendar();
time1.setTime(result.getTime("DatumZeitEnde"));

Calendar time2 = new GregorianCalendar();
time2.setTime(result.getTime("DatumZeitStart"));

long diff = time1.getTimeInMillis()-time2.getTimeInMillis();
Time resultTime = new Time(diff);

Entweder bin ich wieder falsch ran gegangen oder es funktioniert bei mir einfach nicht!
Denn bekomme wieder eine Diffenrenz raus, wo 1 Stunde zu viel ist 🙁


Edit:
Könnte ja jetzt immer ne Stunde abziehen, aber das ja nicht der Sinn der Sache!
 
die Differenz ist 7 Stunden, dass ist in England 7:00 morgens und in Deutschland 8:00 morgens wegen Zeitverschiebung,
bei Sommer-/ Winterzeit/ Schaltjahren noch schlimmer,

ich glaube bei Calendar wirst du auch nicht viel weiter kommen,
lieber long-Werte direkt verwenden, durch 1000*3600 teilen usw.

Code:
public class Test
{
    public static DateFormat ENGLISH_DATE_FORMAT = new SimpleDateFormat("HH:mm:ss");
    static
    {
        ENGLISH_DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT"));

    }

    public static void main(String[] args)
        throws Exception
    {

        Time t1 = new Time(48600000);
        Time t2 = new Time(23400000);
        System.out.println(t1 + " - " + t2);

        Time t3 = new Time(t1.getTime() - t2.getTime());
        System.out.println(ENGLISH_DATE_FORMAT.format(t3));
    }
}
 
Oder gleich mit Joda Time arbeiten. Fuer dich interessant duerfte die Klasse LocalTime sein.

Code:
LocalTime time1 = LocalTime.fromMillisOfDay( 48600000 );
LocalTime time2 = LocalTime.fromMillisOfDay( 23400000 );
LocalTime diff = time1.minus( time2 );

int hours = diff.getHourOfDay();
 
@schalentier
nana, wenn schon dann doch

Code:
LocalTime time1;
LocalTime time2;
LocalTime diff;
int hours;

time1 = LocalTime.fromMillisOfDay( 48600000 );
time2 = LocalTime.fromMillisOfDay( 23400000 );
diff = time1.minus( time2 );

hours = diff.getHourOfDay();
😉

sorry, ein paar mal musst du das noch erdulden
 
Nette Klasse nur bekomme ich immer einen Fehler bei


Code:
diff = time1.minus( time2 )

The method minus(ReadablePeriod) in the type LocalTime is not applicable for the arguments (LocalTime)

also die Methode erwartet "ReadablePeriod"...was das nun zu heißen hat, weiß ich leider nicht! Ansatz sieht ja gut aus!
 
SlaterB hat gesagt.:
sorry, ein paar mal musst du das noch erdulden

Musst dich nicht entschuldigen, damit komm ich schon noch klar. Wenn du an meiner Stelle hier sitzen wuerdest, wuerdest du verstehen, was genau ich meine und damit bezwecke. Leider darf ich nix vom Quellcode (vorher/nachher) posten...

@TO: Sorry, haette es wohl doch erstmal probieren sollen. Nimm minusMillis und lies dich mal in die Konzepte von Joda Time ein. Es gibt auch Duration, das passt sicherlich noch besser zu deinem Problem.
 
Vielen Dank für die Info's und schnellen Antworten :toll:
Werde mir mal JodaTime genauer anschauen!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben