Zeitraumberechnung m. Calendar-Obj.: zuviele Std

Hallo,

Ich habe zwei Calendar-Objekte, bei denen ich den Zeitraum dazwischen berechnen möchte. Leider kriege ich bei meiner Berechnung immer ca. 24 Std. zuviel raus - weiß aber nicht, wieso.
Ich vermute, dass ich immer einen Tag zuviel berechne und die überflüssigen 24 Std. durch Rundungen nicht volle 24 Std. sind.
Ich tue folgendes:

Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();

if (this.isBefore(obj))
{
start.set(this.year, this.month, this.day, this.hour, this.minute,
 this.second);
end.set(obj.year, obj.month, obj.day, obj.hour, obj.minute,
 obj.second);
} else {
end.set(this.year, this.month, this.day, this.hour, this.minute,
 this.second);
start.set(obj.year, obj.month, obj.day, obj.hour, obj.minute,
 obj.second );
}

long endL = end.getTimeInMillis()+ 
 end.getTimeZone().getOffset(end.getTimeInMillis());
long startL = start.getTimeInMillis()+ 
 start.getTimeZone().getOffset(start.getTimeInMillis());

return (((endL/ (1000 \* 60 \* 60)) - (startL/ (1000 \* 60 \* 60))) );

Als Beispiel Daten habe ich
20.04.2006 16:31 und 23.05.2006 09:30 wo ich ca. 785 Std erwarte, aber ca. 808 Std. bekomme (auf die Minuten kommts mir nicht an, aber ein Tag ist mir doch etwas zuviel).
Bei kleinen Zeiträumen (z.B. 21.04.2006 09:31 und 21.04.2006 12:23) gibt es das Problem nicht. Ich vermute, dass ich irgendwie einen Tag zuviel berechne, finde aber nicht, wo.

Kann mir jemand erklären, wo ich die überflüssigen Stunden berechne? Bzw. wie ich sie wieder wegbekomme?

Vielen Dank, Jan

Auch hallo.

Nur so als naive Idee:

Als Beispiel Daten habe ich
20.04.2006 16:31 und 23.05.2006 09:30 wo ich ca. 785 Std
erwarte, aber ca. 808 Std. bekomme (auf die Minuten kommts mir
nicht an, aber ein Tag ist mir doch etwas zuviel).

Der April hat 30 Tage, der Mai 31. Wird diese Tatsache gewürdigt ?
Gemessen an der Problembeschreibung klingt das nämlich nicht so…

HTH
mfg M.L.

Hi Markus,

Ich rechne ja mit den Millisekunden, die dem Datum entsprechen.
Da gehe ich davon aus, das die Funktion mir den korrekten Wert wiedergeben.

bis dann, Jan

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moien

> if (this.isBefore(obj))

Welche Klassen sind den this und obj ?

> long endL = end.getTimeInMillis()+  
> end.getTimeZone().getOffset(end.getTimeInMillis());  
> long startL = start.getTimeInMillis()+  
> start.getTimeZone().getOffset(start.getTimeInMillis());

Lass den Offset weg. (das getTimezone gibt in deinem Fall 2x das gleiche zurück. Aber du weist nicht exakt welche Klasse… Ausserdem: der Offset wird maximal die Winterzeit rausbügeln. Das ist eine Stunde und du hast Tage Versatz)

> return (((endL/ (1000 \* 60 \* 60)) - (startL/ (1000 \* 60 \* 60))) );

return (endL - startL) / (1000L * 60L * 60L)

weniger Divisonen => weniger Rundungen => weniger Fehler (in dem Fall)

Ich vermute, dass ich
irgendwie einen Tag zuviel berechne, finde aber nicht, wo.

Schaltjahr ?

cu

Hi,

this und obj sind eigene Klassen, die ein Datum darstellen. Da krieg ich ja dann auch die Angaben für mein Kalender her.

Der Offset war „historisch“, hab ihn einfach drinnen gelassen - und wie du schon sagst, dass wäre maximal eine Stunden - also nicht das Problem

Die Rechnung hatte ich auch schon so geändert, allerdings hab ich kein nennenswert anderes Ergebnis bekommen :frowning:

Und das es am Schaltjahr (welches dieses Jahr auch gar nicht war) liegt, mag ich nicht glauben! Oder lieg ich hier falsch??

Grüße,
Jan

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moien

ähm … du weist dass Calendar die Monate ab 0 zählt, also 0 für Jan., 1 für Feb… ?

cu

Hi,

Ja, ist mir bekannt - aber spielt das eine Rolle, wenn ich die Differenz wissen will?

1-0 ist doch das gleiche wie 2-1, oder überseh ich hier etwas?
Spielt es überhaupt eine Rolle, wenn ich sowieso auf Millisekunden runtergehe?

Grüße, Jan

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moien

Ja, ist mir bekannt - aber spielt das eine Rolle, wenn ich die
Differenz wissen will?

JA. Die Anzahl der Tag pro Monat ist nicht immer gleich. D.h. es ist nicht egal ob du nun 2-3 oder 3-4 als Spanne hast.

cu

Hi,

OK, habs begriffen - und siehe da, es klappt auch noch! :wink:)

Vielen Dank,
Jan