Autor |
Beitrag |
Webo
      
Beiträge: 577
Erhaltene Danke: 14
Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
|
Verfasst: Do 01.12.11 13:51
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?
_________________ Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: 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) 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.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: 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.
Zuletzt bearbeitet von baka0815 am Do 01.12.11 16:17, insgesamt 1-mal bearbeitet
|
|
Webo 
      
Beiträge: 577
Erhaltene Danke: 14
Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
|
Verfasst: 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.
_________________ Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: 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)); |
|
|
|