Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo zusammen,

ich muss für eine Seite den dritten Montag und den dritten Donnerstag eines Monats ermitteln. Dabei ist die Berechnung unabhängig von der Woche im Monat.

Jetzt könnte ich natürlich vom 1. eines Monats den nächsten Montag und Donnerstag suchen und dann jeweils mit 14 addieren. Das würde mir den dritten Montag und den dritten Donnerstag liefern.

Geht das auch etwas eleganter mit Java und dem Kalender?

Frank

Geschrieben

Ich würde mir den ersten des Monats holen, zum vorherigen Montag gehen und von dort aus den dritten Montag finden. Mit den Konstanten lässt sich das ganze gut auf ein bischen Addition und Subtraktion reduzieren.


tag = 1. des Monats

when tag == MONTAG

    tag = tag + 14 tage

sonst

    tag = tag - (Tag in der Woche(tag) - MONTAG) tage) + 21 tage

Geschrieben
Hallo,

danke für den Tip aber kannst Du mir den sonst Zweig mal erklären. Den habe ich noch nicht ganz verstanden.

Frank

Du hast den aktuellen Tag und zum vorherigen Montag. Dafür holst du dir den Abstand des aktuellen Tages zum Montag (siehe Calender.get(Calender.DAY_OF_WEEK) und Calender.MONDAY) und ziehst diesen vom aktuellen Tag ab.

Dann packst du noch drei (sollten eigentlich vier sein!) Wochen (also 28 Tage) drauf.

Geschrieben

Hallo,

ich habe es jetzt mal probiert.


//aktuelle Jahr und Monat ermitteln
GregorianCalendar cal = new GregorianCalendar();

//auf den ersten des Monats setzen
cal.set(Calendar.DATE, 1);

out.println(cal.get(Calendar.DATE) + "." +
(cal.get(Calendar.MONTH)+1) + "." +
cal.get(Calendar.YEAR)+"<br>"
);

int tag = 1;
if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY)
tag += 14;
else
tag = tag - cal.get(Calendar.DAY_OF_WEEK) - Calendar.MONDAY + 21;

//auf den neuen Tag setzen
cal.set(Calendar.DATE, tag);
out.println(cal.get(Calendar.DATE) + "." +
(cal.get(Calendar.MONTH)+1) + "." +
cal.get(Calendar.YEAR)+"<br>"
);
[/code]

Dort kommt jetzt für den 3. Montag der 19.11. raus, erwartet habe ich den 16.11.

Frank

Geschrieben

Ich habe Deinen Code jetzt nicht ausprobiert, aber wenn ich es richtig gesehen habe, setzt Du nur den Tag des Monats jeweils neu (Calendar.DATE). Wenn Du monatsübergreifend arbeitest, dürfte das nicht sein, was Du willst. mit Calendar#add(int, int) kannst Du in meinen Augen besser arbeiten.

Hast Du Dir denn die Werte für "tag" mal angesehen, ob das so viele Tage für die Berechnung sind, wie Du erwartest?

Peter

Geschrieben

Hallo,

vielleicht kannst du evtl. so rangehen, dass der 3. Montag im Monat frühestens der 15. sein kann. Dann den Wochentag des 15. bestimmen und anhand des Wochentags dann berechnen, wann der nächstfolgende Montag ist bzw. den 15. selbst nehmen, wenn es ein Montag ist.

Gruß Martin

Geschrieben

Hallo Martin,

ich habe es bereits so programmiert wie in meinem Eingangsposting. Was ich jetzt noch betreibe ist Spaß um die Berechnung eventuell zu vereinfachen. Dein Vorschlag mit dem 15. anzufangen ist ja im Prinzip nichts anders als vom 1. den nächsten Montag und Donnerstag zu suchen. Nur ich muss halt noch 14 Tage dazu addieren.

Frank

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...