Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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.

  • Autor

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

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

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

  • Autor

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.