nyari/Teli idoszamitas

Fórumok

Udv!

Egy kis segitsegre lenne szuksegem. Arrol lenne szo, hogy hogyan lehet programilag megallapitani egy adott datumrol hogy az nyari vagy teli idoszamitasba esik? Egeszen pontosan az kellene hogy meg tudjam hatarozni, hogy Marcius utolso vasarnapja 01:00 es Oktober utolso vasarnapja 02:00 kozott van-e. A gondom az utolso vasarnap kinyeresevel van.

Tudnatok ebben segiteni egy kicsit? Faradt vagyok hogy ertelmesen tudjak gondolkodni :}} (Meg nem voltam szabadsagon)

PLC-ben lesz implementalva, ugyhogy a nyelvspecifikus fuggvenyek nem jok. Csak es kizarolag if segitsegevel ha lehet.

Elore is koszonom,
Balogh Szabolcs

Hozzászólások

Van egy ilyen algoritmus vagyis fuggveny, hogy:


double get_julian_date(int ye,int mo,int da)
{
 int    lya;
 double jd;

 if ( mo<=2 )   ye--,mo+=12;

 if ( ye>1582 || ( ye==1582 && mo>10 ) || ( ye==1582 && mo==10 && da>14 ) )
        lya=(2)-(ye/100)+(ye/400);
 else
        lya=0;

 jd=    (double)lya+
        1720994.5+
        (double)(((long)ye*1461L)/4L)+
        (double)((153*(mo+1))/5)+
        (double)da;

 return(jd);
}

ez visszaadja az adott e'v (ye), honap (mo) es nap (da)-ra vonatkozo julian-datumot (ez olyasmi mint a timestamp, csak napban, es idoszamitas elott 4317 ota szamoljak, manapsag olyan 2453xxx korul ja'r).

Ennek a 7-es marade'ka visszaadja a he't napja't:


function get_dayofweek($ye,$mo,$da)
{
 $ye=(integer)$ye;$mo=(integer)$mo;
 if ( $mo<=2 )  {       $mo+=12;$ye-=1;         }
 $r=(integer)(5*$ye/4)+(integer)(13*($mo+1)/5)+(integer)$da-(integer)($ye/100)+(integer)($ye/400)+6;
 return($r%7);
}

(bocs, ez csak php-ben van meg...:])

innen ma'r relative egyszeru": kiszamolod hogy marc 31 a he't milyen napja'ra esik, es addig lepteted vissza, amig vasarnapot nem kapsz. Akkor kezdodott a nyari idoszamitas. Es forditva, okt 31-gyel detto ugyanez, akkor volt ve'ge.

A.

Lehet, hogy hülyeség, de csak brainstorming szinten: nem lenne értelme tárolni ezeket? Mennyi időre tervezed az automatát? Legyen mondjuk 10 év. Az 20 byte.
2007 március utolsó vasárnap, 2007 október utolsó vasárnap, 2008 március utolsó vasárnap, 2008 október utolsó vasárnap, stb.
Vagyis lenne egy ilyen tömböd, hogy:
25,28,30,26,stb.
És csak ebből kéne kiválasztani az (év-2007)*2., ill. az (év-2007)*2+1. elemet.
--
Debian - The "What?!" starts not!

Nem biztos, hogy hueseg. Vegul is annyi helyem van hogy eltaroljak akar tobbet is. Ha nem talalom meg a kapcsolatot a hatralevo napok szama es az aktualis nap a hetbol kozott, akkor lehet az lesz belole. De erzem, hogy nagyon ott vagyok a koztuk levo kapcsolat kornyeken, de csak nem akarja felfedni magat :}}}