29. oktober 2003 - 23:48Der er
27 kommentarer og 1 løsning
Java Date og Calendar tekniske problemer
Jeg har en applikation hvor jeg skal lægge et antal minutter til det nuværende tidspunkt, dette er ikke særligt svært, jeg gør flg: Calendar c=new GregorianCalendar(); c.set(Calendar.MINUTE, c.get(Calendar.MINUTE)+minutes);
Dernæst udføres en funktion med det fremtidige tidspunkt, efter udførelsen af denne funktion skal der returneres til det nuværende tidspunkt (der skal resettes til det klokken er nu!), men problemet er at næste gang jeg kalder
Er tidspunktet jeg får fat i det forrige tidspunkt med det forrige antal minutter tilføjet, således at tidspunktet er rykket minutes minutter yderligere ... Altså .. eksempel Klokken er nu 23.00 og jeg skal udføre en funktion med dette klokkeslet + 20 minutter således setter jeg time til at være lig med time + 20 minutter og jeg har tidspunktet 23.20 ... efter funktionens udførelse skal tidspunktet resettes til 23.00, men tilføjer jeg atter 20 minutter bliver det til 23.40 .. dvs tidspunktet har slet ikke resettet... Hvad fa'n gør jeg galt eller glemmer jeg at gøre .Toppoint for et kvikt svar. Tak!
Det skal siges at jeg efter funktionen med nuværende klokkeslet + minutes gør flg: c.set(Calendar.HOUR, c.get(Calendar.HOUR)); c.set(Calendar.MINUTE, c.get(Calendar.MINUTE));
Men det er lige vidt ... som om at tiden er "sat" for good og ikke kan ændres tilbage til det klokken er NU.
kendte ikke funktionens "funktionalitet", da jeg grundet tidspres ikke har nået at udforske api'et, hvilket er en dum undskyldning for ikke at gøre det, har været for doven til at afprøve det. Jeg forsøger lige den funktion, vender tilbage
Jeg benytter c.add(Calendar.HOUR,-currentHours); c.add(Calendar.MINUTE,-currentMinutes); Til at trække minutter og timer fra ... men næste gang når jeg skal lægge et (andet) antal minutter til har den ikke fjernet minutterne alligevel. Jeg benytter c.add(Calendar.MINUTE, minutes); og minutterne er det forrige antal minutter tilføjet + det nye antal minutter tilføjet ... tiden er ikke blevet roll'et back
int min1 = 20; c.add(Calendar.MINUTE, min1); // 20 frem // do something c.add(Calendar.MINUTE, -min1); // 20 tilbage så vi er på start int min2 = 40; c.add(Calendar.MINUTE, min2); // 40 frem // do something c.add(Calendar.MINUTE, -min2); // 40 tilbage så vi er på start
Jeg benytter c.add(Calendar.HOUR,-currentHours); c.add(Calendar.MINUTE,-currentMinutes); for at "rolle back" ... men kalder jeg dernæst c.getTime() (som returnerer et Date objekt)
Calendar c = new GregorianCalendar(); // c=nu Calendar c1 = (Calendar)c.clone(); //c1=c=nu // modificer c1 som du vil Calendar c2 = (Calendar)c.clone(); //c2=c=nu // modificer c2 som du vil
Nej. Du har c=nu og så ruller du frem på kopier af c - og du behøver ikke at tænke på at rulle tilbage, fordi du laver en ny kopi hver gang du vil rule frem.
perfekt, havde ikke tænkt på dette. Clone er genial i mit tilfælde, jeg bliver sparet for en masse linjer kode og en metode, jeg havde der hed "resetTime()" ... tsk tsk nej jeg kan bare slette denne metode idet jeg ikke opererer på samme Calendar objekt. Ja ja alle de gode ting kommer til dem der venter og arbejder på at få koden til at gå op. Hvis du vil give et svar, vil jeg give dig velfortjente point!
Det er sjovt så lidt jeg får udforsket api'et og bruger rigtigt lang tid på at implementere funktioner selv, som udmærket kunne erstattes af metoder der findes i api'et, blot man tager sig tid til at studere de satans metoder...
Synes godt om
Ny brugerNybegynder
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.