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
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
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
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
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.
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
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
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
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
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
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden