robotto7831a Geschrieben 30. Oktober 2009 Geschrieben 30. Oktober 2009 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 Zitieren
flashpixx Geschrieben 30. Oktober 2009 Geschrieben 30. Oktober 2009 (bearbeitet) Ich habe mal schnell Calendar (Java 2 Platform SE v1.4.2) überflogen. Aber ich würde es ähnlich machen, nutzen würde ich "DAY_OF_WEEK_IN_MONTH" bzw "DAY_OF_MONTH" um den Tag anzugeben. Das ganze relativ zu dem Monat, den Du benötigst Bearbeitet 30. Oktober 2009 von flashpixx Zitieren
etreu Geschrieben 2. November 2009 Geschrieben 2. November 2009 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 Zitieren
robotto7831a Geschrieben 2. November 2009 Autor Geschrieben 2. November 2009 Hallo, danke für den Tip aber kannst Du mir den sonst Zweig mal erklären. Den habe ich noch nicht ganz verstanden. Frank Zitieren
etreu Geschrieben 3. November 2009 Geschrieben 3. November 2009 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. Zitieren
robotto7831a Geschrieben 3. November 2009 Autor Geschrieben 3. November 2009 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 Zitieren
kingofbrain Geschrieben 4. November 2009 Geschrieben 4. November 2009 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 Zitieren
robotto7831a Geschrieben 7. November 2009 Autor Geschrieben 7. November 2009 Hallo, ich habe die Formel jetzt mal versucht in Excel nachzubilden aber das stimmt vorne und hinten nicht. Frank Zitieren
MartinSt Geschrieben 7. November 2009 Geschrieben 7. November 2009 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 Zitieren
robotto7831a Geschrieben 8. November 2009 Autor Geschrieben 8. November 2009 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 Zitieren
MartinSt Geschrieben 8. November 2009 Geschrieben 8. November 2009 Hallo Frank, ja stimmt; der einzige Vorteil wäre, dass du dir die Addition für einen der beiden Wochentage sparst, wenn du am 15. auf einen Montag bzw. Donnerstag triffst. Gruß Martin Zitieren
Empfohlene Beiträge
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.