16. maj 2002 - 17:54Der 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 ??
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
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.
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 !!
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.