Avatar billede jsl Nybegynder
28. september 2005 - 21:04 Der er 8 kommentarer og
1 løsning

Dato difference

Udfra en fødselsdato, af formattet ddmmyy, vil jeg gerne kunne regne den tilhørendes persons alder ud.
Det er ikke noget problem at udtage yy fra CPR nr, og få datoen for i dag. Herefter kan jeg også let trække yy fra år 2005, men herved får jeg samme alder uanset om det er før eller efter personen fødselsdato.
Er der da i JAVE ikke en indbygget metode til at finde f.eks. en alder med?
Avatar billede arne_v Ekspert
28. september 2005 - 21:10 #1
prøv den her metode:

  private static int age(int y, int m, int d) {
      Calendar cal = new GregorianCalendar(y, m, d);
      Calendar now = new GregorianCalendar();
      int res = now.get(Calendar.YEAR) - cal.get(Calendar.YEAR);
      if((cal.get(Calendar.MONTH) > now.get(Calendar.MONTH)) ||
        (cal.get(Calendar.MONTH) == now.get(Calendar.MONTH) &&
        cal.get(Calendar.DAY_OF_MONTH) > now.get(Calendar.DAY_OF_MONTH))) {
        res--;
      }
      return res;
  }
Avatar billede jsl Nybegynder
28. september 2005 - 22:29 #2
Der er noget mystisk ved koden, når cal.get(Calendar.MONTH) == now.get(Calendar.MONTH). Her regner den forkert, og jeg har ikke lige kunne se, hvor betingelsen fejler.
Avatar billede arne_v Ekspert
28. september 2005 - 22:39 #3
jeg har vist fået byttet om på > og <

prøv:

  private static int age(int y, int m, int d) {
      Calendar cal = new GregorianCalendar(y, m, d);
      Calendar now = new GregorianCalendar();
      int res = now.get(Calendar.YEAR) - cal.get(Calendar.YEAR);
      if((cal.get(Calendar.MONTH) > now.get(Calendar.MONTH)) ||
        (cal.get(Calendar.MONTH) == now.get(Calendar.MONTH) &&
        cal.get(Calendar.DAY_OF_MONTH) < now.get(Calendar.DAY_OF_MONTH))) {
        res--;
      }
      return res;
Avatar billede jsl Nybegynder
28. september 2005 - 22:55 #4
Det er ikke kun det. Jeg havde også prøvet det. F.eks. er age(2000,9,11) lig 4. Det skulle være lig 5.
Avatar billede arne_v Ekspert
28. september 2005 - 23:02 #5
den original kode er OK

>

men

age(2000,9,11)

er

age(2000,Calendar.OCTOBER,11)

så prøv:

age(2000,Calendar.SEPTEMBER,11)
Avatar billede jsl Nybegynder
28. september 2005 - 23:09 #6
Nu virker det. Er januar så lig 2 og december lig 13?
Hvis du svare næste gang, får du point.
Avatar billede arne_v Ekspert
28. september 2005 - 23:20 #7
nej januar er 0 og december er 11
Avatar billede jsl Nybegynder
28. september 2005 - 23:24 #8
nå ja, det var også det jeg skulle have ment :-) Alting starter jo ved 0....
Avatar billede arne_v Ekspert
28. september 2005 - 23:25 #9
og beklager forvirringen med > versus < lige pludselig narrede jeg mig selv
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester