Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Java - Liegt Geburtstag in Zeitraum
Webo - Do 01.12.11 13:51
Titel: Java - Liegt Geburtstag in Zeitraum
Hallo,
ich habe grade das Problem, dass ich prüfen soll, ob ein Kunde zwischen dem Anfangs- und Enddatum Geburtstag hatte. Falls ja, wird ihm was gutgeschrieben. Das ganze ist in Java gelöst. Ich dachte zuerst: ja, ist ja einfach, kann man einfach mit den vorgegebenen Methoden prüfen, ob das Datum dazwischen liegt. Doch das Geburtsjahr funscht da ja zwischen. Also setze ich temporär das Geburtsjahr hoch. Aber da treten wieder so viele Möglichkeiten auf, die Fehler erlauben.
Ich habe im Moment:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| @SuppressWarnings("deprecation") public void checkBirthdays() { for (Customer c : customerList) { Date birthd = c.getBirthday(); Date prv = VideoRentalManager.getInstance().getPreviousDate(); Date cur = VideoRentalManager.getInstance().getCurrentDate(); if (prv.getYear() == cur.getYear()) { birthd.setYear(cur.getYear()); if (cur.after(birthd) && prv.before(birthd)) c.setHasFreeMovie(true); } if ((cur.getYear() > prv.getYear() ) && (birthd.getMonth() >= prv.getMonth()) && (birthd.getDate() >= prv.getDate())) { birthd.setYear(prv.getYear()); if (cur.after(birthd) && prv.before(birthd)) c.setHasFreeMovie(true); } else if ((cur.getYear() > prv.getYear() ) && (birthd.getMonth() <= cur.getMonth()) && (birthd.getDate() <= cur.getDate())) { birthd.setYear(cur.getYear()); if (cur.after(birthd) && prv.before(birthd)) c.setHasFreeMovie(true); } |
Gibts da nen einfacheren Weg? Bzw liefert der Code überhaupt die passenden Ergebnisse?
Bergmann89 - Do 01.12.11 15:25
Hey,
ich bin kein Java-Profi, aber warum wandelst du die Daten nicht einfach in ein UNIX-Zeitstempel um? (siehe
hier [
http://www.tutorials.de/java/262723-datum-unix-timestamp-konvertieren.html]) Dann kannst du das ganze einfach mit < und > vergleichen. Ich glaube man kann die Java-Date-Typen auch direkt miteinander vergleichen, da bin ich mir aber grad nicht sicher.
MfG Bergmann.
baka0815 - Do 01.12.11 16:04
Bei Java gibt's auf jeden Fall die Funktion
getTimeInMillis oder so ähnlich, mit der du ein
long zurückbekommst.
Aber reicht nicht folgendes?
C#-Quelltext
1: 2: 3: 4: 5:
| int birDate = birthd.getMonth() * 100 + birthd.getDay(); int curDate = cur.getMonth() * 100 + cur.getDay(); int prvDate = prv.getMonth() * 100 + prv.getDay();
c.setHasFreeMovie(prvDate <= birDate && birDate <= curDate); |
Edit: Reicht nicht, siehe meine Beispiele unten.
Webo - Do 01.12.11 16:06
Das Problem ist, dass ich das Geburtstagsdatum ja erstmal passend bekommen muss (glaub ich zumindestens).
Beispiel:
aktuelles Datum 1.12.2011
vorheriges Datum 25.11.2011
Geburtstag 2.10.1978
Da kann ich in Sekunden/Timestamp umwandeln, aber dann wird er nie in dem Zeitraum Geburtstag haben. Und die Jare weglassen kann man ja auch nicht, da sonst das Ergebnis verfälscht wird.
baka0815 - Do 01.12.11 16:16
Quelltext
1: 2: 3:
| Aktuell: 01.12.2011 Vorher : 25.11.2011 Geburt : 02.10.1978 |
In diesem Beispiel hätte er keinen Freifilm, da er nicht im Zeitraum Geburtstag hat.
Quelltext
1: 2: 3:
| Aktuell: 01.12.2011 Vorher : 25.09.2011 Geburt : 02.10.1978 |
In diesem Beispiel hätte er einen Freifilm, da er im Zeitraum Geburtstag hat.
Quelltext
1: 2: 3:
| Aktuell: 01.07.2011 Vorher : 25.09.2010 Geburt : 02.10.1978 |
In diesem Beispiel hätte er einen Freifilm, da er im Zeitraum Geburtstag hat.
Im Prinzip brauchst du ja nur prüfen, ob der Kunde in diesem Jahr bereits Geburtstag hatte (
birthd.getMonth() * 100 + birthd.getDay() <= cur.getMonth() * 100 + cur.getDay()). Wenn ja, setzt du das Jahr auf das aktuelle, sonst auf das Vorjahr.
Und dann einfach:
C#-Quelltext
1:
| c.setHasFreeMovie(prv.before(birthd) && birthd.before(cur)); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!