# Zeitspannen berechnen



## Reignman (27. Aug 2004)

Hallo zusammen!

Weiss hier jemand wie ich am geschicktesten in Java die Zeitspanne zwischen zwei Zeitpunkten ermitteln kann ?

zB: ich habe 2 Objekte vom Typ GregorianCalendar
von 2004-08-09 09:30
bis  2004-08-27 16:30

... und möchte die Zeitspanne (am besten die Anzahl der Stunden und die Anzahl der Minuten) rausbekommen, wobei alle Ausnahmen wie zB Schaltjahre richtig berücksichtigt werden.

Bin dankbar für alle Hinweise!

mfg,
R.


----------



## Roar (27. Aug 2004)

hol dir von deinem calendar entweder zuerst das date objekt und davon den timestamp ( getTime()) oder direkt von calendar den timestamp ( getTimeInMillis()) und subtrahiere den timestamo des älteren datums von dem des neueren, und dann kannst du mit der differenz ein neues Date objekt instantiieren und das dann einem anderen GregorianCalendar zuweisen und dann hast du deine zeitspanne


----------



## Reignman (30. Aug 2004)

Hatte gehofft das geht auch irgendwie angenehmer. Vielen Dank!


----------



## Reignman (30. Aug 2004)

Habe noch so meine Bedenken dabei: Wenn ich eine Zeitspanne von zwei Calendar-Objekten berechne, die nur Minuten als kleinste genutze Einheit enthalten (Sekunden sind 0), kann es dann durch das Dividieren nach der Berechnung, um von Millisekunden wieder auf Minuten zu kommen, irgendwelche Ungenauigkeiten geben ?

Bitte um Erfahrungswerte!
thx,
R.


----------



## Isaac (30. Aug 2004)

Nein. Wenn du wirklich sicher stellst das Sekunden und Millisekunden auf 0 gesetzt sind, kann da nichts passieren.


----------



## Reignman (1. Sep 2004)

Leider bekomm ich manchmal eine negative Zeitdauer raus. Woran kann das liegen ? Kann es sein, dass der gecastete int überläuft ?



```
public int computeDuration(Calendar from, Calendar to) {
		Date fromDate = from.getTime();
		Date toDate = to.getTime();
		long difference = fromDate.getTime() - toDate.getTime();
		return (int) difference / 60000;
	}
```


Bin für jede Hilfe dankbar !

mfg, 
R.[/code]


----------



## Isaac (1. Sep 2004)

Klar, schau dir das mal an

return (int) difference / 60000;

du castest difference auf int und teilst dann durch 60000

macht mal (int)(difference/60000);


----------



## Reignman (1. Sep 2004)

Herzlichen Dank!


----------

