Fórum témák

» Több friss téma
Fórum » Dátum különbség számítása kontrollerrel
Lapozás: OK   1 / 1
(#) pokot hozzászólása Okt 30, 2007 /
 
Ü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
(#) Topi válasza pokot hozzászólására (») Okt 30, 2007 /
 
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.
(#) pokot válasza Topi hozzászólására (») Okt 30, 2007 /
 
a formátum: BCD-ben tárolva egyesével ÉV,hónap,nap,óra,perc,másodperc.pont ez okozza a problémát
(#) Topi válasza pokot hozzászólására (») Okt 30, 2007 /
 
Az eredmény is bcd legyen ugyan ilyen bontásban?
(#) Topi válasza Topi hozzászólására (») Okt 30, 2007 /
 
MOVF masodperc1,W
SUBWF masodperc2,W
MOVWF PORTB
(#) pokot válasza Topi hozzászólására (») Okt 30, 2007 /
 
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...
(#) Csirkefej hozzászólása Okt 30, 2007 /
 
x86-ra asszem írtam ilyet asm-ben. Az segít?
(#) Topi válasza pokot hozzászólására (») Okt 30, 2007 / 4
 
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.
(#) szdavid válasza Topi hozzászólására (») Okt 30, 2007 /
 
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:
(#) Topi válasza szdavid hozzászólására (») Okt 30, 2007 /
 
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.
(#) Csirkefej válasza szdavid hozzászólására (») Okt 30, 2007 /
 
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.
(#) szdavid válasza Csirkefej hozzászólására (») Okt 30, 2007 /
 
É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)
(#) pokot válasza Topi hozzászólására (») Okt 31, 2007 /
 
kösz Topi!a unix time stamp-re keresve találtam korrektnek tűnő C kódot,abból már megírom az ASM-et egyébként egy ADuC841-en (mcs-51) lesz implementálva,már ha én írom,mert nagyobb probléma is van a rendszerrel
Következő: »»   1 / 1
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem