Avatar billede public2 Nybegynder
09. maj 2007 - 14:07 Der er 5 kommentarer og
2 løsninger

Date, Calendar og spørgsmål til dette

Hejsa.

Jeg er ved at lave et projekt, som i sin enkelthed skal kunne skabe et overblik over en arbejdsfase.

En del af programmet er, at man skal indtaste (i sidste ende i en GUI) en start dato for sit projekt / arbejdsfase, f.eks. 20.05.07 og  man skal indtaste en slut dato f.eks. 01.07.07.

Disse to skal så gemmes i hver deres variable, henholdsvis startDate og endDate. Når det så er gjort, så skal der udregnes hvor mange dage der er mellem slut og start datoen.
Jeg har kigget på Java Doc's API under "Calendar" og "Date" for at finde nogle metoder der kunne bidrage til denne funktion, og har fundet noget som minder om det, men måske ikke vil være fyldestgørende: computeTime()

I min kode har jeg som det første en System.out.print der udskriver den nuværende dato, og det gør den også - men jeg er løbet panden mod en mur med det, at sætte to datoer og udregne forskellen på dem.

Til at starte med har jeg prøvet med nogle scanners, men jeg kan ikke få det til at virke tilfredsstillene. Jeg kan godt få to datoer gemt i en variable; men den variable er jo af typen "String" og jeg vil tro, at jeg skal benytte typen "Date" for at kunne Compute de to datoer.

Håber der er nogle der kan hjælpe mig med det. Hvis jeg har forklaret mig lidt roddet, så skriv det endeligt - og jeg vil forsøge at uddybe hvad jeg mener.

På forhånd mange tak for jeres hjælp

Mvh
Emil (public2)
Avatar billede arne_v Ekspert
09. maj 2007 - 15:00 #1
maaske

(dato1.getTime() - dato2.getTime())/(24 * 60 * 60 * 1000L)
Avatar billede snoop_one Nybegynder
10. maj 2007 - 10:34 #2
Ja jeg ville også gøre som arne_v
Her er et lille eksempel,

    private static final long EN_TIME = 60 * 60 * 1000L;

    private static final String myFormat = "dd.MM.yy";

    public static void main(String... args) {
        try {
            String inputStartDate = "10.05.2007";
            String inputStopDate = "12.05.2007";
            SimpleDateFormat sdf = new SimpleDateFormat(myFormat);
            Calendar startTime = Calendar.getInstance();
            startTime.setTime(sdf.parse(inputStartDate));
            Calendar stopTime = Calendar.getInstance();
            stopTime.setTime(sdf.parse(inputStopDate));
            System.out.println(startTime.getTime());
            System.out.println(stopTime.getTime());
            System.out.println("#Dage: "
                    + dageImellem(startTime.getTime(), stopTime.getTime()));
        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

    public static long dageImellem(Date d1, Date d2) {
        return ((d2.getTime() - d1.getTime() + EN_TIME) / (EN_TIME * 24));
    }
Avatar billede snoop_one Nybegynder
10. maj 2007 - 10:37 #3
Hvis du ikke vil bruge calendar og kun køre på date kan du også benytte,

            String inputStartDate = "10.05.2007";
            String inputStopDate = "12.05.2007";
            SimpleDateFormat sdf = new SimpleDateFormat(myFormat);
            Date startTime = sdf.parse(inputStartDate);
            Date stopTime = sdf.parse(inputStopDate);
            System.out.println("#Dage: " + dageImellem(startTime, stopTime));
Avatar billede public2 Nybegynder
14. maj 2007 - 06:51 #4
Hej igen.

Tak for begge jeres svar. Jeg fandt delvist ud af det selv, men brugte lidt af jeres råd, som I skrev her. Koden jeg endte op med ser således sådan ud:

            Date startDate1 = new GregorianCalendar(syear, smonth, sday).getTime();
        Date endDate1  = new GregorianCalendar(eyear, emonth, eday).getTime();
       
        SimpleDateFormat sdf = new SimpleDateFormat("EEEE, d. MMM - yyyy");
        String sDate = sdf.format(startDate1);
        String eDate = sdf.format(endDate1);
        sdf.setLenient(false);

        long diff = endDate1.getTime() - startDate1.getTime();
       
        System.out.println("  Forskellen på " + eDate);
        System.out.println("  og " + sDate + " er " + (diff / (1000L*60L*60L*24L)) + " dage.");
    }

Mange tak for jeres hjælp og hvis I hver gider at smide et svar, så vil jeg kvittere med point.

Mvh
Public2
Avatar billede arne_v Ekspert
14. maj 2007 - 08:56 #5
svar
Avatar billede snoop_one Nybegynder
21. maj 2007 - 17:48 #6
svar
Avatar billede public2 Nybegynder
22. maj 2007 - 00:45 #7
Jeg siger mange tak for hjælpen...
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