Avatar billede meek Nybegynder
16. maj 2002 - 17:54 Der er 6 kommentarer og
1 løsning

Calendar...

Hej Eksperter;

Hvor finder jeg, eller er der nogen der har lavet en metoder der tager 2 CALENDAR (altså datoer) som parameter og som returnerer antallet af år, måneder, dage, minutter, sekunder imellem de 2 angivne datoer ??

Meek
Avatar billede aslan Nybegynder
16. maj 2002 - 18:13 #1
import java.util.*;

public class Shopping {




    Shopping ()
    {

      Calendar idag = Calendar.getInstance();
      Calendar jul = Calendar.getInstance();

      jul.set(idag.get(Calendar.YEAR), Calendar.DECEMBER, 25);


      System.out.println("Der er "+(jul.get(Calendar.DATE)- idag.get(Calendar.DATE)));



    }
    public static void main(String[] aslan)
    {
    new Shopping ();
    }

}
Avatar billede aslan Nybegynder
16. maj 2002 - 18:14 #2
leg selv med det:)
Avatar billede codemon Nybegynder
16. maj 2002 - 18:14 #3
nej men det er ikke så svært: (2 Calendar objekter i mitCalObjekt og mitCalObjekt2)

long diffTime = mitCalObjekt.getTimeInMillis()-mitCalObjekt2.getTimeInMillis();
SimpleDateFormat sd = new SimpleDateFormat("dd MMM yyyy HH:mm:ss");
String diffTimeString = sd.format(new Date(diffTime));
Avatar billede jakoba Nybegynder
16. maj 2002 - 18:22 #4
Såsnart vi begynder at tælle i år og måneder er målingen ikke entydig da både år og måneder varierer i længde altefter hvilket år og hvilken måned der er tale om.

men hvis det er OK med blot dage, timer, minutter og sekunder er det rimelig nemt.

brug metoden getTimeInMillis:

Calendar tid1;
Calendar tid2;
    // sæt værdier i datoerne
long milliimellem = tid2.getTimeInMillis()-tid2.getTimeInMillis();
long secsimellem = (long)(milliimellem/1000)
int sekunder = secsimellem % 60;
long minsimellem = (long)Math.floor( secsimellem/60 );
int minutter = minsimellem % 60;
long timsimellem = (long)Math.floor( minsimellem/60 );
int timer = timsimellem % 24;
long dage = (long)Math.floor( timsimellem/24 );

nu har du variablerne dag, timer, minutter og sekunder.

mvh JakobA
Avatar billede meek Nybegynder
16. maj 2002 - 18:49 #5
Hej igen.

Imellem tiden har jeg bygget min egen.
Desuden kan jeg ikke kalde getTimeInMillis() ???

Min metoder tager 2 Calender ind, og returnerer en String med intervallet... HER:

public String getTidsInterval(Calendar cStart, Calendar cSlut) throws RemoteException {
    String output = "";
    int years = 0, months = 0, days = 0, hours = 0, minuts = 0, seconds = 0;
   
    if (cStart.before(cSlut)) {
      // cStart er før cSlut... interval kan nu udregnes...
      years = cSlut.get(Calendar.YEAR) - cStart.get(Calendar.YEAR);

      if (cSlut.get(Calendar.MONTH) < cStart.get(Calendar.MONTH)) { // er der et helt år imellem målt på måneder...
        years--;
        months = (cSlut.get(Calendar.MONTH)+12)- cStart.get(Calendar.MONTH);
      }
      else {  // Der er over 1 års mellemrum
        months = cSlut.get(Calendar.MONTH)- cStart.get(Calendar.MONTH);
      }

      if (cSlut.get(Calendar.DATE) < cStart.get(Calendar.DATE)) { // er der et helt år imellem målt på måneder...
        months--;
        days = ((cSlut.get(Calendar.DATE)+ cSlut.getActualMaximum(Calendar.DAY_OF_MONTH)))- cStart.get(Calendar.DATE);
      }
      else {  // Der er over 1 års mellemrum
        days = cSlut.get(Calendar.DATE)- cStart.get(Calendar.DATE);
      }

      if (cSlut.get(Calendar.HOUR) < cStart.get(Calendar.HOUR)) { // ...
        days--;
        hours = (cSlut.get(Calendar.HOUR)+ 24)- cStart.get(Calendar.HOUR);
      }
      else {  // Der er over 1 års mellemrum
        hours = cSlut.get(Calendar.HOUR)- cStart.get(Calendar.HOUR);
      }

      if (cSlut.get(Calendar.MINUTE) < cStart.get(Calendar.MINUTE)) { // ...
        hours--;
        minuts = (cSlut.get(Calendar.MINUTE)+ 60)- cStart.get(Calendar.MINUTE);
      }
      else {  // Der er over 1 års mellemrum
        minuts = cSlut.get(Calendar.MINUTE)- cStart.get(Calendar.MINUTE);
      }

      if (cSlut.get(Calendar.SECOND) < cStart.get(Calendar.SECOND)) { // ...
        minuts--;
        seconds = (cSlut.get(Calendar.SECOND)+ 60)- cStart.get(Calendar.SECOND);
      }
      else {  // Der er over 1 års mellemrum
        seconds = cSlut.get(Calendar.SECOND)- cStart.get(Calendar.SECOND);
      }

    }

    else {
      // Der byttes om på de 2 datoer..
      output = getTidsInterval(cSlut, cStart);
      return output;
    }


Som I kan se vil metoden kalde sig selv hvis den først angivne dato er større end nr. 2 !!

Meek
Avatar billede meek Nybegynder
16. maj 2002 - 18:50 #6
hovsa..

glemte lige sidste linie...:

return "INTERVAL - " + seconds + " sekunder, " + minuts + " minutter, " + days + " dage, " + months + " maaneder, " + years + " aar.";

  }
Avatar billede bearhugx Nybegynder
16. maj 2002 - 20:47 #7
tit kan man spare points ved at søge igennem allerede besvarede spørgsmål ...

ref : http://www.eksperten.dk/spm/186028

/Søren
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