Jahresübergreifende Datumsspanne

FanClub

Mitglied
Hallo,

ich möchte von dem jeweilig Aktuellen Termin 6 Monate zurück rechnen lassen.
Bisher mache ich das so:

Java:
		GregorianCalendar heute = new GregorianCalendar();
		GregorianCalendar heuteMinus6 = new GregorianCalendar();
		GregorianCalendar heuteMinus5 = new GregorianCalendar();
		GregorianCalendar heuteMinus4 = new GregorianCalendar();
		GregorianCalendar heuteMinus3 = new GregorianCalendar();
		GregorianCalendar heuteMinus2 = new GregorianCalendar();
		GregorianCalendar heuteMinus1 = new GregorianCalendar();
		GregorianCalendar heuteMinusRest = new GregorianCalendar();
		heute.set(heute.get(Calendar.YEAR), heute.get(Calendar.MONTH), heute.get(Calendar.DAY_OF_MONTH));
		heuteMinus6.set(heute.get(Calendar.YEAR),heute.get(Calendar.MONTH)-6, 1);
		heuteMinus5.set(heute.get(Calendar.YEAR),heute.get(Calendar.MONTH)-5, 1);
		heuteMinus4.set(heute.get(Calendar.YEAR),heute.get(Calendar.MONTH)-4, 1);
		heuteMinus3.set(heute.get(Calendar.YEAR),heute.get(Calendar.MONTH)-3, 1);
		heuteMinus2.set(heute.get(Calendar.YEAR),heute.get(Calendar.MONTH)-2, 1);
		heuteMinus1.set(heute.get(Calendar.YEAR),heute.get(Calendar.MONTH)-1, 1);
		heuteMinusRest.set(heute.get(Calendar.YEAR),heute.get(Calendar.MONTH), 1);

So bekomme ich, etwas umständlich, jeweils den 01. der letzten 6 Monate.

Wenn allerdings das heutige Datum der 01.02.2012 wäre, dann rechnet er mir ja nur die Monate zurück aber nicht die Jahre und somit findet er auch, logischerweise, auch keine Datensätze mehr.

Gibt es hier eine andere Möglichkeit mir jeweils den 01. eines jeden Monats der letzten 6 Monate anzeigen zu lassen?

gruß
 

Landei

Top Contributor
[c]Date[/c] und [c]Calendar[/c] sind zwei der verkorkstesten Klassen der ganzen API. Wenn du nicht warten willst, bis JSR 310 endlich umgesetzt wird, würde ich dir zu Joda-Time - Java date and time API - Home raten. Du hast dort wesentlich mehr Möglichkeiten zum Rumrechnen, die Klassen sind konsistent und du kannst Sachen weglassen, die du nicht brauchst (z.B. Zeitzone, Uhrzeit).
 

FanClub

Mitglied
Hallo, danke für eure Hilfe.

Die Joda - Time kann ich leider vorerst nicht benutzen.

Ich habe es jetzt so gemacht:
Java:
		GregorianCalendar heuteMinus6 = new GregorianCalendar();
		heute.set(heute.get(Calendar.YEAR), heute.get(Calendar.MONTH), heute.get(Calendar.DAY_OF_MONTH));
		heuteMinus6.add(heute.get(Calendar.MONTH),-6);
heuteMinus6.set(Calendar.DAY_OF_MONTH,1);
		
		SimpleDateFormat df = new SimpleDateFormat("dd.MM.yy");
		String st = df.format(heuteMinus6.getTime()).toString();

Müsste da nicht der 01.03.11 in "st" stehen? Es steht aber "01.08.11" drin. Ich stehe gerade auf dem Schlauch.

gruß
 
S

SlaterB

Gast
heuteMinus6.add(heute.get(Calendar.MONTH),-6);

->

heuteMinus6.add(Calendar.MONTH,-6);

übrigens besser erst den Tag auf 1 setzen, sonst hast du evtl. Ärger wenn du von 31. September zunächst auf 31. Februar wechselst und ähnliches
 

FanClub

Mitglied
Prima, danke das hat geklappt.

Jetzt habe ich meine Übersicht mit den letzten 6 Monaten und den aktuellen Monat.
Die einzelnen Monate sind jetzt verlinkt und wenn ich auf einen Monat klicke, wird eine neue Seite aufgebaut, wo ich die DS für den Monat auslesen will.

An die Seite bekomme ich als String das geliefert (beispiel): "September.11"
Jetzt wird meine SQL Abfrage ja ein BETWEEN sein. 01.September.11 AND 30.September.11.

Das funktioniert ja auch aber wie gehts, dass ich jeweils den letzten Tag des Monats bekomme?
Den "01." kann ich ja an den String anfügen, nur wie bekomme ich raus, ob es der 30. oder 31. oder 28. ist? :)

Ein Umwandeln von String in Date hat nicht so funktioniert, da er wohl mit dem "September" nicht klar kommt, kann das sein?
[Java]
Date monatJahr=new Date();
String monatJahrRe = stichForm.getMonatJahr();
monatJahrRe="01."+monatJahrRe;
try{
monatJahr = df.parse(monatJahrRe);
}catch(Exception ex){
ex.printStackTrace();
}
[/code]

Immer wenn ich mit Datum und Kalendern arbeiten muss, komme ich mir vor wie im ersten Lehrjahr. :bae:


EDIT: Okay, das parse- Problem ist gelöst. aber gibt es dennoch einen eleganteren Weg?
 
Zuletzt bearbeitet:
S

SlaterB

Gast
ich weiß nicht was du alles aktuell fragst, aber eines:
Calendar auf ersten des Monats setzen, +1 Monat, -1 Tag -> Letzter Tag des Monats
 

Oben