Fórum témák
» Több friss téma |
Üdv mindenki!
olyan algoritmust kellene irnom ,amely két tetszőleges dátum különbségét adja vissza nap egységben.természetesen pontosan le kell kezelni a 30/31 napos hónapokat,szökőévet. van erre valakinek kész kódja?a nyelv tökmindegy,asm lenne a legjobb,de ha C-ben megvan már könnyen átirom.minden ötletet szívesen fogadok.előre is kösz a válaszokat
Azért azt határozd meg, hogy milyen dátum formátum.
Szöveges sql style: 2007-10-30 10:58:27 vagy esetleg unix timestamp. Utóbbi szerencsésebb, mert a unix timestamp az 1970.01.01. 00:00:00-tól eltelt másodperceket számolja. Ergo nem kell törődnöd a szökőévekkel meg a hónapok napszámaival. A unix timestamp egy egyszerű szám. Kettőt kivonva egymásból megkapod hány másodperc a különbség a két idő között. Ezután már csak osztások kérdése, hogy ez hány perc, óra, nap, hét, hónap, év, század... Annyit kell tudnod, hogy 1970.01.01 00:00:00-kor volt az abszolút nulla idő. Pl. 00:10:06-nál már 606-on állt a "számláló". Szerk: Ja, és utóbbit már elég könnyű implementálni assemblyben... SUBLW és társai.
a formátum: BCD-ben tárolva egyesével ÉV,hónap,nap,óra,perc,másodperc.pont ez okozza a problémát
Az eredmény is bcd legyen ugyan ilyen bontásban?
MOVF masodperc1,W
SUBWF masodperc2,W MOVWF PORTB
egyedül a napok száma(esetleg óra,pers másodperc).Az én problémám ugyanis az,hogy ha van mondjuk egy 2007.08.19 18.00 és egy 1998.06.12 11.00,akkor hogy tudom kiszámolni a két időpont között eltelt napok számát.Egy mérőrendszerbe kell,ahol időnként letárol a rendszer egy bázisidőt(pl mérés kezdete)és később ehhez a bázishoz viszonyitva kell megadni az eltelt időt.pl a mérés ideje 132óra 35perc...
Ha így kell, akkor csinálj a dátumból unixtimestampet. 18-as PIC-ek alapból tudnak szorozni hardveresen.
unixtimestamp = mp+perc*60+ora*3600+ stbstb. Majd a napoknál az alábbit: napok[13] = {31,28,31,30,31,...,29} Itt feltételbe beteszed, ha az év osztható 4-el és a hónap = 2, akkor hónap = 12 (vagyis a listában a 13.) Utánna így adod hozzá +napok[nap-1]*60*60*24+ stb.
Ez így nem pontos, ugyanis minden 4. év szökőév, de minden 100. nem az, viszont minden 400. mégis az.
Tehát ha ((év%4==0)&&(év%100!=0))||(év%400==0), akkor szökőév. :yes:
Jó... persze ez oké, de nem is ez volt a lényeg. Hanem az, hogyha szökőév, és a hónap 2. akkor át kell állítani 13.-ra.
Ezt a tömbös dolgot meg assembly-vel PCL-el és RETLW-vel könnyen meg lehet oldani.
Még ez sem pontos, mert meg kell állapítani, hogy a kiinduló és a cél dátum között hány szökőév telt el, aminél figyelembe kell venni a kiinduló év, szökőévhez viszonyított helyzetét, és ennyivel korrigálni az eredményt.
Én csak az adott év szökőév voltának megállapításához adtam segítséget. A többi már triviális (egyetemen mindig ezt használták/ják az előadók, ha valamit nem tudnak megmagyarázni)
|
Bejelentkezés
Hirdetés |