zwei GregorianCalender Datums von einander abziehen-> Problem!

kleinfritzchen

Aktives Mitglied
Hallo,
ich habe in einem Buch und durch eigenes Denken versucht die Differenz von zwei Daten in Tagen (GregorianCalender) über die Millisekunden zu berechnen.
Die Daten sind einmal der 21.1.2013 und der 31.3.2013 (d2=1364684400000 - d1=1358722800000)
und
der 21.1.2013 und der 1.4.2013 ( d2=1364767200000 - d1=1358722800000)
die Ergebnisse sind volgende:
(1364684400000 - 1358722800000) / 86400000 =69

(1364767200000 - d1=1358722800000) / 864000000 =69,9583333333

Wenn ich hier über int die Nachkommastellen abschneide erhalte ich beide male 69 Tage.
Wie kann ich diesen Fehler vermeiden?
Hier meine Methode:
Java:
public int getDatumDiferenz(GregorianCalendar istDatum) {
		long d2 = istDatum.getTimeInMillis();
		System.out.println("    d2="+d2);
		long d1 = beginDatum.getTimeInMillis();
		System.out.println("    d1="+d1);
		int ergebnis = (int) ((d2 - d1) / 86400000);
		return ergebnis;
	}
Danke schon mal !!!
 
69,9583333333 entspricht 69 Tage und 23 Stunden.
GregorianCalender berücksichtigt die Zeitumstellung, deshalb fehlt da eine Stunde.

Schreib einfach das hier in deinen Code
Java:
istDatum.setTimeZone(new SimpleTimeZone(0, ""));
beginDatum.setTimeZone(new SimpleTimeZone(0, ""));

Dann verwendest du GMT Zeit ohne Zeitumstellung.
 
Hallo,
danke erst mal für die schnelle Hilfe!
ich werd erst mal die Lösung von DrZoidberg ausprobieren.

Von JODA hab ich auch schon gehört. Ich hab es auch schon mal in einem anderen Versuch verwwendet, wollte es aber in diesem Projekt mal ohne versuchen.
Danke erst mal.
 
Hallo,
habs ausprobiert:
Java:
public int getDatumDiferenz(GregorianCalendar istDatum) {
		istDatum.setTimeZone(new SimpleTimeZone(0, ""));
		beginDatum.setTimeZone(new SimpleTimeZone(0, ""));
		long d2 = istDatum.getTimeInMillis();
		 System.out.println("    d2="+d2);
		long d1 = beginDatum.getTimeInMillis();
		 System.out.println("    d1="+d1);
		int ergebnis = (int) ((d2 - d1) / 86400000);
		return ergebnis;
	}
gibt jetzt einen Fehler bei der Berechnung der Differenz ganz am Anfang.

Kann es sein das ich die Festlegung auf die TimeZone viel früher einbauen muss und nicht erst in der Methode?
21.01.2013
d2=1358722800000
d1=1358726400000
0 differenz zu Zyklusbeginn
22.01.2013
d2=1358809200000
d1=1358726400000
0 differenz zu Zyklusbeginn
23.01.2013
d2=1358895600000
d1=1358726400000
1 differenz zu Zyklusbeginn
Hab den Fehler gefunden!!! man muss tatsächlich drauf achten das in so einem Fall alle Datumswerte die an diese Methode übergeben werden und das vor allem jeder datumswert der im Programm generiert wird gleih in SimpleTime(0,"") erstellt wird!!!

MfG Fritz
 
Hallo,
aufgrund solcher Fehler kann ich eigentlich nur JODA empfehlen, obwohl die verwendung für Anfänger erst ein bischen Gewöhnung bedarf. (Ich versuche Java mit hilfe des javavideokurs.de zu lernen)
:rtfm:
 
Hier och ein Nachtrag:
Ich habe es jetzt umgebastelt fürJODA DateTime. Bei der Berrechnung mit den Millisekunden gibt es bei der Zeitumstellung von Winter auf Sommerzeit das gleiche Probllem wie mit Calendar / GregorianCalendar .
Aber mit JODA kann man auch sehr einfach über eine Methode die differenz Tage errechnen und die stimmt...:toll:
 

Neue Themen


Zurück
Oben