Natriumarm Geschrieben 7. März 2008 Geschrieben 7. März 2008 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 Zitieren
kingofbrain Geschrieben 7. März 2008 Geschrieben 7. März 2008 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 Zitieren
Natriumarm Geschrieben 10. März 2008 Autor Geschrieben 10. März 2008 Hallo, nach mehreren Versuche ohne Erfolg, bin ich am verzweifeln. Gibs irgendwo Beispiele wo ich nachlesen könnte, wie ich die Combobox fülle mit den entsprechenden Daten? Bitte um Hilfe!! Zitieren
kingofbrain Geschrieben 10. März 2008 Geschrieben 10. März 2008 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 Zitieren
Natriumarm Geschrieben 10. März 2008 Autor Geschrieben 10. März 2008 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. Zitieren
TDM Geschrieben 10. März 2008 Geschrieben 10. März 2008 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. Zitieren
kingofbrain Geschrieben 10. März 2008 Geschrieben 10. März 2008 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 Zitieren
Natriumarm Geschrieben 11. März 2008 Autor Geschrieben 11. März 2008 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 Zitieren
kingofbrain Geschrieben 11. März 2008 Geschrieben 11. März 2008 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 Zitieren
kingofbrain Geschrieben 12. März 2008 Geschrieben 12. März 2008 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 Zitieren
Natriumarm Geschrieben 13. März 2008 Autor Geschrieben 13. März 2008 Habs probiert und läuft jetzt alles wie erwünscht. Nochmals vielen Dank für die sehr guten Hilfen und Tipps!!! MFG Ein Java-Anfänger 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.