Avatar billede uefa Nybegynder
03. december 2003 - 11:44 Der er 7 kommentarer og
1 løsning

Udregning af år mellem to datoer

Hey derude,

Jeg skal står og skal bruge en metode om returnere antallet af hele år mellem to datoer.
Der skal tages højde for skudår etc...

Er der nogen der har et forslag?
Avatar billede arne_v Ekspert
03. december 2003 - 11:50 #1
Hele år som i alder ? Eller hele persiode 1/1-31/12 mellem de 2 datoer ?
Avatar billede uefa Nybegynder
03. december 2003 - 11:58 #2
Hele år som i adler :) Jeg skal udregne hvor gamel et medlem i en kub er ud fra hans / hendes fødselsdato og dags dato...
Avatar billede arne_v Ekspert
03. december 2003 - 12:00 #3
Det kan muligvis gøres smartere, men her er noget kode som ser ud til at
virke:

import java.util.*;
import java.text.*;

public class DateDiff {
    private static DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
    public static int calcDiff(String ds1, String ds2) throws Exception {
        Date d1 = df.parse(ds1);
        Date d2 = df.parse(ds2);
        Calendar c1 = new GregorianCalendar();
        c1.setTime(d1);
        Calendar c2 = new GregorianCalendar();
        c2.setTime(d2);
        int res = 0;
        while(c2.getTime().getTime() >= c1.getTime().getTime()) {
            c2.add(Calendar.YEAR, -1);
            res++;
        }
        res--;
        return res;
    }
    public static void main(String[] args) throws Exception {
        System.out.println(calcDiff("01-12-1993", "02-12-2003"));
        System.out.println(calcDiff("02-12-1993", "02-12-2003"));
        System.out.println(calcDiff("03-12-1993", "02-12-2003"));
    }
}
Avatar billede uefa Nybegynder
03. december 2003 - 12:04 #4
Arne han er for vild :)

(Vildman tribute)
Avatar billede Slettet bruger
03. december 2003 - 12:41 #5
GregorianCalendar cal = new GregorianCalendar(1977,7,11);
GregorianCalendar now = new GregorianCalendar();
int alder = now.get(Calendar.YEAR) - cal.get(Calendar.YEAR);
Avatar billede arne_v Ekspert
03. december 2003 - 12:46 #6
Prøv og kør:

import java.util.*;

public class Alder {
    public static void main(String[] args) {
        System.out.println(alder(2003,Calendar.DECEMBER, 1));
        System.out.println(alder(2003,Calendar.DECEMBER, 2));
        System.out.println(alder(2003,Calendar.DECEMBER, 3));
    }
    private static int alder(int y, int m, int d) {
        Calendar cal = new GregorianCalendar(1977,7,11);
        Calendar now = new GregorianCalendar();
        return now.get(Calendar.YEAR) - cal.get(Calendar.YEAR);
    }
}
Avatar billede arne_v Ekspert
03. december 2003 - 12:49 #7
Vrøvl.

import java.util.*;

public class Alder {
    public static void main(String[] args) {
        System.out.println(alder(1993,Calendar.DECEMBER, 1));
        System.out.println(alder(1993,Calendar.DECEMBER, 2));
        System.out.println(alder(1993,Calendar.DECEMBER, 3));
    }
    private static int alder(int y, int m, int d) {
        Calendar cal = new GregorianCalendar(y, m, d);
        Calendar now = new GregorianCalendar();
        return now.get(Calendar.YEAR) - cal.get(Calendar.YEAR);
    }
}

3/12 2003 er ikke fyldt 10 endnu.
Avatar billede arne_v Ekspert
03. december 2003 - 13:00 #8
Jeg vrøvler stadigvæk, fordi vi har den 3. idag.

Anyway - det kan laves som:

import java.util.*;

public class Alder {
    public static void main(String[] args) {
        System.out.println(alder(1993,Calendar.DECEMBER, 2));
        System.out.println(alder(1993,Calendar.DECEMBER, 3));
        System.out.println(alder(1993,Calendar.DECEMBER, 4));
    }
    private static int alder(int y, int m, int d) {
        Calendar cal = new GregorianCalendar(y, m, d);
        Calendar now = new GregorianCalendar();
        int alder = 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))) {
            alder--;
        }
        return alder;
    }
}

men man er nødt til at korrigere efter dag/måned.
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