[java] aantal dagen berekenen

Pagina: 1
Acties:
  • 1.379 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • Patrickvs
  • Registratie: Juli 2000
  • Laatst online: 08-02-2022
Ik ben bezig met een programmaatje en nu loop ik vast, ik ben nu steeds aan het klooien met het uitrekenen van het aantal dagen tussen 2 datums.

Het uitrekenen van het aantal jaren snap ik wel, dat heb ik ook wel werkend maar hoe breid ik dit nu verder uit zodat ik het aantal dagen verschil kan uitrekenen? Heeft iemand een zetje in de goeie richting hoe ik dit het beste kan aanpakken?

Dit heb ik voor het uitrekenen van de jaren :
code:
1
2
3
4
5
6
7
8
9
    int jaren = eindJaar - beginJaar;

    if ( eindMaand < beginMaand )
        jaren--;
    else
        if ( eindMaand == beginMaand && eindDag < beginDag )
          jaren--;

    return jaren;

Alvast bedankt,

Patrick

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

maak er een Date() of Calendar() objecten van, bepaal de verschillen via de functies daarvan of laat de unix timestamp oid eruit rollen.

Die laatste kan je van elkaar aftrekken en omreken naar een aantal dagen/maanden/jaren.

Acties:
  • 0 Henk 'm!

  • Patrickvs
  • Registratie: Juli 2000
  • Laatst online: 08-02-2022
aha, ik moet de datums invoeren aan de hand van 2 textfields... in de vorm ddmmjjjj dat was ik nog vergeten te vertellen

Ik denk dan dat dit verhaal niet meer opgaat of wel?

Acties:
  • 0 Henk 'm!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 07-10-2022
Inderdaad, de Calendar is de beste en makkelijkste optie :)

Als je alles uit moet gaan rekenen (dat moest ik eens doen voor een vak waarin ik Java leerde ;) ) dan is dat een hoop gepruts en moet je met erg veel dingen rekening houden (als je ook niet gebruik mag maken van de milli-seconds tussen de beide data).

Bekijk gewoon ff de API doc:
http://java.sun.com/j2se/1.4/docs/api/java/util/Calendar.html

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Acties:
  • 0 Henk 'm!

Anoniem: 23039

verhaal gaat dan nog steeds op hoor.

Acties:
  • 0 Henk 'm!

  • Patrickvs
  • Registratie: Juli 2000
  • Laatst online: 08-02-2022
Ik zal eerst eens ff gaan kijken bij het Calender object, kijken of ik het en hoe ik het kan toepassen :)

Het blijft toch prutsen hè met java :)

Acties:
  • 0 Henk 'm!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verhaal gaat wel op...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Date date1 = new Date(textField1.getText()); // geen mooie constructor
Date date2 = new date(textField2.getText());

long verschil = Math.abs(date1.getTime()-date2.getTime());

int msec = verschil % 1000;
verschil = verschil / 1000;
int sec = verschil % 60;
verschil = verschil / 60;
int min = verschil % 60;
verschil = verschil / 60;
int uren = verschil % 24;
verschil = verschil / 24;
int dagen = verschil;

Je kan zelf nog gaan afronden.. dus als uren groter of gelijk aan 12 dan dagen+1.

[edit] was me aan het vervelen.

Acties:
  • 0 Henk 'm!

Anoniem: 23039

hee hee hee er loopt hier iemand een beetje vooruit, jdk 1.4 is wel beta he? :)
magoed de uitleg zal wel niet zoveel veranderd zijn.

Acties:
  • 0 Henk 'm!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 07-10-2022
Reneos: hee hee hee er loopt hier iemand een beetje vooruit, jdk 1.4 is wel beta he? :)
magoed de uitleg zal wel niet zoveel veranderd zijn.
Hehe :) wel beta 2 ;) . 1.4 is niet erg veel verschillend van 1.3 behalve veel coole nieuwe features. Helaas nog geen geparameterizeerde typen in deze release, maar die kan je toch nog wel gebruiken als je echt voor beta software gaat ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Acties:
  • 0 Henk 'm!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Nou we toch met datums bezig zijn, heeft iemand wat meer ervaring met periodes?

bv..

(1-3-96)-(1-2-96) = 1 maand (vanaf 1-2-96).

en
(1-4-96)-(1-3-96) = 1 maand (vanaf 1-4-96).

maar

(1-2-96)+((1-4-96)-(1-3-96))=(4-3-96) en niet (1-3-96)

wordt er intussen een beetje gek van. Ik zit te denken aan 2 periode types. Een periode type uitgedrukt in milliseconden en 1 in weken, maanden, jaren etc.

Acties:
  • 0 Henk 'm!

  • Patrickvs
  • Registratie: Juli 2000
  • Laatst online: 08-02-2022
Op dinsdag 02 oktober 2001 21:19 schreef Alarmnummer het volgende:
Verhaal gaat wel op...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Date date1 = new Date(textField1.getText()); // geen mooie constructor
Date date2 = new date(textField2.getText());

long verschil = Math.abs(date1.getTime()-date2.getTime());

int msec = verschil % 1000;
verschil = verschil / 1000;
int sec = verschil % 60;
verschil = verschil / 60;
int min = verschil % 60;
verschil = verschil / 60;
int uren = verschil % 24;
verschil = verschil / 24;
int dagen = verschil;

Je kan zelf nog gaan afronden.. dus als uren groter of gelijk aan 12 dan dagen+1.
toon volledige bericht
Bedankt voor alle tips tot nu toe, ik heb nog een vraagje over hierbovenstaande voorbeeld code ... wat voor input moet je hier voor hebben? ddmmjjjj of jjjjmmdd?

Acties:
  • 0 Henk 'm!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op dinsdag 02 oktober 2001 21:51 schreef -P@tRiCk- het volgende:

[..]

Bedankt voor alle tips tot nu toe, ik heb nog een vraagje over hierbovenstaande voorbeeld code ... wat voor input moet je hier voor hebben? ddmmjjjj of jjjjmmdd?
Stuur anders je huiswerk even naar ons op, dan sturen wij het weer door naar je leraar. Ach wat. Wij kijken het meteen na en sturen het dan door naar je leraar (scheelt hem ook weer nakijk werk). Wat vind je daarvan? :) Je moet ook zelf nog wat doen, denk dat ik je al genoeg gematst hebt :) En je ziet ook ergens 'slechte constructor' staan, dat betekend dat dit niet de goeie manier meer is om dit voor elkaar te krijgen. Kijk maar eens naar de GregorianCalendar class, die is daar veel beter geschikt voor dan de Date class. Kan je ook meteen zien wat voor formaat je allemaal kan invoeren. Succes ermee :)

Acties:
  • 0 Henk 'm!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

En een van de belangrijkste dingen die je moet leren om een goed informaticus te worden is: waar kan ik mijn info vinden?

Acties:
  • 0 Henk 'm!

  • Patrickvs
  • Registratie: Juli 2000
  • Laatst online: 08-02-2022
naja :? .....ik zoek het zelf wel uit... ik denk toch niet dat het mag met die Date of Calender objecten.... ik denk dat ik het gewoon moet uitrekenen.....net zoals met die jaren

Acties:
  • 0 Henk 'm!

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 12-06 00:33
Op dinsdag 02 oktober 2001 21:58 schreef Alarmnummer het volgende:
En een van de belangrijkste dingen die je moet leren om een goed informaticus te worden is: waar kan ik mijn info vinden?
Post het effe op GOT zou ik zeggen. Hmm, beetje kut als je onder een geheimhoudings clausule zit. ;)

Acties:
  • 0 Henk 'm!

  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Op dinsdag 02 oktober 2001 21:59 schreef -P@tRiCk- het volgende:
naja :? .....ik zoek het zelf wel uit... ik denk toch niet dat het mag met die Date of Calender objecten.... ik denk dat ik het gewoon moet uitrekenen.....net zoals met die jaren
Zelf uitzoeken is natuurlijk altijd het beste. Op het moment dat je de JavaDoc goed kunt lezen wordt het leven echt een heel stuk makkelijker. En als je niet met Date en Calendar objecten mag werken vraag ik me af waarom zo'n opdracht in Java moet, maar goed....

With the light in our eyes, it's hard to see.


Acties:
  • 0 Henk 'm!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op dinsdag 02 oktober 2001 21:59 schreef -P@tRiCk- het volgende:
naja :? .....ik zoek het zelf wel uit... ik denk toch niet dat het mag met die Date of Calender objecten.... ik denk dat ik het gewoon moet uitrekenen.....net zoals met die jaren
Een goed informaticus die vindt ook niet 2 keer het wiel uit (hij doet het minimaal 10x :P )

Acties:
  • 0 Henk 'm!

  • Patrickvs
  • Registratie: Juli 2000
  • Laatst online: 08-02-2022
owja... misschien ff voor iemand die misschien nog eens gaat zoeken naar hoe hij aan de hand van 2 datums het aantal dagen verschil moet uitrekenen op de rekenmethode :?

Hier mijn oplossing :
code:
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
28
29
30
31
32
33
34
35
36
37
  public static int verwerkDatum( int begindatum, int einddatum )
  {
    //Berekening van eind jaar, maand en dag.
    int eindJaren = einddatum % 10000;
    int eindMaanden = einddatum / 10000 % 100;
    int eindDagen = einddatum / 1000000;

    //Berekening van begin jaar, maand en dag.
    int beginJaren = begindatum % 10000;
    int beginMaanden = begindatum / 10000 % 100;
    int beginDagen = begindatum / 1000000;

    //Bereken verschillen tussen de verschillende jaren, maanden en dagen.
    int jarenVerschil = eindJaren - beginJaren;
    int maandenVerschil = eindMaanden - beginMaanden;
    int dagenVerschil = eindDagen - beginDagen;

    int totaalVerschil;

    if ( dagenVerschil < 0 )
    {
        dagenVerschil = dagenVerschil + 30;
        maandenVerschil--;
    }

    if ( maandenVerschil < 0 )
    {
        maandenVerschil = maandenVerschil + 12;
        jarenVerschil--;
    }

    totaalVerschil = jarenVerschil * 360 +
                 maandenVerschil * 30 +
                 dagenVerschil;

    return totaalVerschil;
  }

Acties:
  • 0 Henk 'm!

  • Patrickvs
  • Registratie: Juli 2000
  • Laatst online: 08-02-2022
owja ps. ik ben er niet uitgekomen aan de hand van die Gregorian Calender object... ik snap gewoon niet hoe zoiets werkt.....

ik heb wel gezien dat je aan de hand van de constructor het jaar , maand en dag kan doorgeven. Maar nu heb ik al verschillende dingen geprobeert om het aantal milliseconden (sinds 1970) tevoorschijn te toveren maar dat lukt me niet.....

let wel op..... dit is niet meer voor school want deze opdracht heb ik al afgetekend.. meer uit belangstelling van hoe het ook had gekund.

Acties:
  • 0 Henk 'm!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ingewikkelde oplossing. Waarom bepaal je niet eerst het verschil in milliseconden (dus date1 - date2 wat trouwens een hele gekke benaming al is) en dat terug zetten naar minuten uren dagen etc etc?

Acties:
  • 0 Henk 'm!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

code:
1
2
GregorianCalendar date = new GregorianCalendar(years,months,days,hours,minutes,seconds);
long aantalms = date.getTime().getTime();

Acties:
  • 0 Henk 'm!

  • Patrickvs
  • Registratie: Juli 2000
  • Laatst online: 08-02-2022
huh wat raar..... 2 x getTime() ? waarom is da?

Acties:
  • 0 Henk 'm!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

code:
1
2
3
GregorianCalendar gregCalandar = new GregorianCalendar(years,months,days,hours,minutes,seconds);
Date date = gregCalandar.getTime();
long aantalms = date.getTime();

Zo duidelijker? :)

Acties:
  • 0 Henk 'm!

  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 12-05 14:03
Maak van datums date opjecten vraag aantal seconden op van alle bij de datums, en bereken daar uit het aantal dagen

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


Acties:
  • 0 Henk 'm!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op woensdag 03 oktober 2001 21:30 schreef djexplo het volgende:
Gebruik de java class java.util.Date
en dan getDay(), getMonth() etc
zie http://java.sun.com/products/jdk/1.1/docs/api/java.util.Date.html#getMinutes()
Daarmee is het weer superlastig om het verschil te bepalen, dus je schiet er niets mee op.

Acties:
  • 0 Henk 'm!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op woensdag 03 oktober 2001 21:30 schreef djexplo het volgende:
Maak van datums date opjecten vraag aantal seconden op van alle bij de datums, en bereken daar uit het aantal dagen
Je weet het aantal seconden in die datum, das een getal tussen 0 en 60 (60 dus niet voor de duidelijkheid) en daarmee kan je niet het verschil bepalen. Maar je idee is wel oke.. Ik doe het via het aantal miliseconden. De Date.getTime() functie stuurt het aantal miliseconden terug dat verstreken is vanaf 1 januarie 1970 tot die datum. Als je dit doet voor beide datums en je trekt die waarden van elkaar, dan weet je wat die datums in miliseconden van elkaar verschillen. En dat verschil in miliseconden kun je wel weer omzetten naar dagen.

Acties:
  • 0 Henk 'm!

  • Patrickvs
  • Registratie: Juli 2000
  • Laatst online: 08-02-2022
Op woensdag 03 oktober 2001 21:29 schreef Alarmnummer het volgende:

Zo duidelijker? :)
Zucht :) nou ik weet nu hoe het werkt.... dit moest je maar net allemaal ff weten...


Ik heb het ook nog ff aan m'n leraar gevraagd en die zei dat ik maar wat moest gaan spelen met dit soort dingetjes..want dit wordt nooit gebruikt in een boek als java stap voor stap...dus krijgen we het ook niet

Acties:
  • 0 Henk 'm!

Anoniem: 36842

Op dinsdag 02 oktober 2001 21:35 schreef Alarmnummer het volgende:
Nou we toch met datums bezig zijn, heeft iemand wat meer ervaring met periodes?

bv..

(1-3-96)-(1-2-96) = 1 maand (vanaf 1-2-96).

en
(1-4-96)-(1-3-96) = 1 maand (vanaf 1-4-96).

maar

(1-2-96)+((1-4-96)-(1-3-96))=(4-3-96) en niet (1-3-96)

wordt er intussen een beetje gek van. Ik zit te denken aan 2 periode types. Een periode type uitgedrukt in milliseconden en 1 in weken, maanden, jaren etc.
toon volledige bericht
misschien heeft februari 3 dagen minder dan maart? duh.. }:O

Acties:
  • 0 Henk 'm!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Tip: probeer eens door de Java Documentatie heen te ploegen, en zet het http://search.java.sun.com/Search/java ergens waar je er snel bij kan.

Tip2: zorg voor een goeie idee met code completion :) dat maakt het leven echt 2x zo makkelijk. Wat zeg ik nou? 10x. Ik gebruik codeguide (extreeeeeem goed) maar je zou ook JBuilder of kawa kunnen gebruiken (er zijn nog wel meer) JBuilder is trouwens totaal niet geschikt voor het klopwerk, alleen voor het bouwen van gui. Ga gewoon op je object staan, druk op die mooie F1 toets en voila, Java Documentatie voor je object.

Acties:
  • 0 Henk 'm!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op woensdag 03 oktober 2001 21:38 schreef zyrox het volgende:

[..]

misschien heeft februari 3 dagen minder dan maart? duh.. }:O
Kan volgens mij wel een beetje vriendelijker |:(
We zijn niet allemaal zo slim als jij ;)

Een onderdeel van de specs zijn dat je niet altijd mag omzetten naar dagen, maar dat soms maanden en jaren behouden moeten blijven. Tis niet zo makkelijk als je denkt :)
Pagina: 1