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.

Combobox mit bestimmten Wochentag füllen

Empfohlene Antworten

Veröffentlicht

Moin moin,

ich hab da eine Frage. Ich möchte in einer Combobox alle Montag ab einem bestimmten Datum anzeigen lassen (zum Beispiel die letzten 8 Montage).

Da ich diese Informationen nicht aus einer DB oder ähnlichem beziehen kann, bräuchte ich sicherlich eine Formel oder so, die mir zum Beispiel die Millisekunden seit dem 1.1.1970 zählt und daraufhin die Montage ausgeben kann?

Ziel des Ganzen ist es, sich einen Montag anhand des Datums auszusuchen. Daraufhin werden dann sämtliche Informationen zu diesem Tag und den Rest der Woche (Termine, Besprechungen, Zeiten) angezeigt, jeweils in eigenen Bereichen.

Vielen Dank im vorraus und mfg

Servus,

schau Dir mal die Klasse Calendar und die Ableitung GregorianCalendar der Java SE an. Die kapseln und abstrahieren Date bereits soweit, das Du mit Kalenderinformationen arbeiten kannst. Ist zwar immer noch am Anfang ein wenig mühselig, aber es funktioniert.

Peter

Ich bin mir sicher, ich verstehe Dich falsch, aber der Combobox gibst Du einfach über die Methode addItem(Object o) Werte mit. Also:


JComboBox combo = new JComboBox();


combo.addItem(date1);

combo.addItem(date2);

Oder willst Du wissen, wie Du die korrekten Daten ermittelst? Was hast Du denn probiert und wo hakt es?

Peter

  • Autor

Also das ich der Combobox Werte gebe klappt schon.

Ich hab jetzt aber nur das aktuelle Datum drin was ich mir aus

calendar.getTimeInMillis();

hole. Zufällig ist ja heut Montag und das passt ja auch. Was mir jetzt fehlt, wo es hakt, ist, das ich jetzt noch gern den vergangenen Montag (sprich den 3.3.2008) und noch mindestens die 2 davor drin haben möchte.

Ab nächste Woche dann den 17.03, den 10.03, den 03.03 und den 25.02.

Darauf die Woche dann den 24., den 17, den 10 und den 03.03 und das halt immer so weiter.

Knabbern tu ich halt dran die Montag raus zu filtern, ich brauch nämlich nur genau die.

Zieh doch einfach so oft 24 * 3600 * 1000 Ms ab, bis DAY_OF_WEEK = 1 (Montag)

Pseudocode:


date = date.getMilliseconds() - (DAY_OF_WEEK.Monday - date.DAY_OF_WEEK) * 24 * 3600 * 1000

Somit kommst du jedenfalls zum letzten Montag. Alle für alle anderen Montage brauchst du ja nur x-mal 7 * 24 * 3600 * 1000 Ms addieren/subtrahieren.

Servus,

noch schöner, als hier die Millisekunden bis zum Tag hochzurechnen und abzuziehen, finde ich die Verwendung der Methode .roll() auf dem Calendar besser, damit kann ich nämlich schöner einen Tag vor und zurück marschieren. Dann prüfe ich halt erst so lange, bis ich den nächsten Montag habe, und danach rolle ich jeweils eine Woche, solange, bis ich genug Montage habe.

Hast Du Dir denn die API Dokumentation zu Calendar angesehen? Warum hast Du dort keine Lösung gefunden?

Peter

  • Autor

Moin

Start = calendar.getTimeInMillis() - (calendar.MONDAY - calendar.DAY_OF_WEEK) * 24 * 3600 * 1000;

Start ist ne Long Variable

calendar ist vom Typ GregorianCalendar

hab ich jetzt probiert, das bringt mir den 16.03.2008

habs mit "-Tag*6" ergänzt /geschummelt um auf den Montag zu kommen, stimmt das dann so? Bekomm jetzt auf jeden Fall den aktuellen Montag und die davor halt.

Das mit dem Calendar.roll() aber bin auch nicht draus schlau geworden

Servus,

woraus bist Du denn konkret nicht schlau geworden? Es steht doch in der Erklärung genau drin, was die Methode tut. Also hier noch mal langsam (die Methode ist hier reingetippt, ohne IDE, deshalb können noch Typos drin sein):


Calendar calendar = Calendar.getInstance(); // hol Dir ein Calendar-Objekt


// hol Dir den nächsten Montag

while(calendar.get(Calendar.DAY_OF_WEEK != Calendar.MONDAY) {

    calendar.roll(Calendar.DAY_OF_WEEK, true); // "rolle" jeweils einen Tag nach vorn.

}


// jetzt hat calendar den nächsten Montag erreicht. 

Jetzt sollte es eine kleine Transferleistung sein, dieses Beispiel so zu erweitern, dass Du ausgehend vom jetzigen Montag jeweils eine Woche nach vorn "rollst", so lange, bis Du genügend Montage zusammen hast.

Allerdings glaube ich Dir nicht, das Du die Methode "roll" nicht verstanden hast, sondern denke, das Du einfach nicht in die Dokumentation geschaut hast. Denn dort steht genau das drin.

Peter

Guten Morgen,

Natriumarm hat mich per PN auf einen Fehler in meinem Codeausschnitt aufmerksam gemacht, deshalb hier kurz die Korrektur:


while(calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {

Geändert ist die schließende Klammer nach DAY_OF_WEEK, da ich ja den Wert, den ich dort zurückbekomme, mit der Konstanten für Montag vergleichen will.

@Natriumarm: probiers bitte nochmal aus und sag bei weiteren Fehlern Bescheid.

Peter

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

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.