GregorianCalendar 2 Datumswerte(Differenz) auf volles Jahr prüfen

Cheefrocker

Bekanntes Mitglied
Hallo zusammen,
bin momentan dran zwei Datumswerte zu vergleichen und habe mit der Berechnungslogik ein Problem:

Ich will eine Methode schreiben die mir zwei Gregorian-Calendar entgegen nimmt und True zurück liefert, wenn die Differenz der Datumswerte größer oder gleich ein Jahr ist.

Beispiel:
Input:
von-Datum: 25.06.2008
bis-Datum: 30.06.2009
Output:
True

Input:
von-Datum: 01.07.2009
bis-Datum: 30.06.2010
Output:
True


Input:
von-Datum: 02.07.2009
bis-Datum: 30.06.2010
Output:
False


Java:
public static boolean real_full_year(GregorianCalendar von,
			GregorianCalendar bis) {
		GregorianCalendar xvon = new GregorianCalendar(von.get(Calendar.YEAR),
				von.get(Calendar.MONTH), von.get(Calendar.DATE),0,0);
		GregorianCalendar xbis = new GregorianCalendar(bis.get(Calendar.YEAR),
				bis.get(Calendar.MONTH), bis.get(Calendar.DATE), 0,0);
		// zieht ein Tag ab, da der erste Tag ja auch mit zählt.
		xvon.add(Calendar.DATE, -1);
		// fügt dem von-Datum 1 Jahr hinzu.
		xvon.add(Calendar.YEAR, 1);
		System.out.println(xvon);
		System.out.println(xbis);
		// Überprüft ob das Von-Datum nach dem bis-Datum ist. Wenn ja liefert er
		// false zurück
		// andernfalls liegt das bis-Datum nach oder gleich mit dem von-Datum
		// auf.
		System.out.println("BEFORE:von bis");
		System.out.println(xvon.before(xbis));
		System.out.println("equals:von bis");
		System.out.println(xvon.equals(xbis));
		System.out.println("AFTER:von bis");
		System.out.println(xvon.after(xbis));
		
		if (xvon.equals(xbis) || xvon.after(xbis)) {
			return true;
		} else {
			return false;
		}
Scheint nicht für alle Fälle zu klappen. Kann mir jemand sagen, wie das richtig zu rechnen habe?

Vielen dank im voraus.

Cheefrocker
 
equals() überprüft nicht ob die beiden Daten gleich sind, sondern ob die beiden Objekte gleich sind.

Hier mein Vorschlag:
Java:
	public static boolean real_full_year(GregorianCalendar von, GregorianCalendar bis) {
		GregorianCalendar vonClone = (GregorianCalendar)von.clone();
		// fügt dem von-Datum 1 Jahr hinzu.
		vonClone.add(Calendar.YEAR, 1);
		return vonClone.getTimeInMillis() <= bis.getTimeInMillis();
	}
 
Hallo Michael,
danke für deinen Code-Schnipsel.

Wenn ich den ersten Tag mitzählen lassen will muss ich doch noch 1 Tag abziehen?
vonClone.add(Calendar.DATE, -1);

Klappt deine Lösung für alle Jahre und Konstellationen? (Schaltjahr,...)

Viele Grüße
 

Neue Themen


Zurück
Oben