Je to takové nehezké řešení (kéž by Java měla pro toto nějakou podporu), ale co jsem se zatím setkal (celkem asi 3 případy v mé praxi) - vždycky se to řešilo takto. Typicky už měl náš zákazník podobnou tabulku už připravenou pro jiné aplikace, takže jsme se jen napojili na existující data. Výhodou tohoto řešení navíc je, že si zákazník obhospodařuje dny volna sám, a když vyhlásí celozávodku není nic jednoduššího než přidat pár záznamů do podobné tabulky. Má to pod kontrolou a všechny jeho interní aplikace (pokud z této tabulky čerpají - jako že na tom zákazník vždy trval) se novému nastavení jednoduše přizpůsobí.
Honza N. 25.7.07, "Ing. Radek Žuja" <[EMAIL PROTECTED]>:
Asi se mnou nebude spousta lidí souhlasit ale úplně nejjednodušší je mít (pokud tedy jde o aplikaci s přístupem k databázi) mít někde tabulku datumů řekněme takovéto struktury datum datetime (PK) den tinyint (1-31) tyden tinyint (0-53) mesic tinyint (1-12) den_v_tydnu tinyint (1-7) svatek tinyint (1 -Ano, 0- ne) A pokud někdo potřebuje třeba ještě dekády, kvartály apod. Na plnění této tabulky si napsat proceduru, která to vygeneruje třeba na 10 let dopředu, Mít třeba pomocnou tabulku svátku, kterou ta procedura či trigger vezme v potaz. A pak to můžete do aplikace zjiˇšťovat jednoduchými selecty. V palikaci pak nemusíte řešit jestli je den_v tydnu 1 neděle, nebo pondělí. Jediné místo (a to opravdu jedinné), kde to budete řešit je ona plnicí procedura(trigger) Ta tabulka v DB moc místa nezabere, a funguuje to podle mě nejlépe. Radek Žuja PS: ty datové typy tinyint jsou se sybase. Je to jení nejmenší datový typ. Jde v podstatě o Byte. > Zdravim, > kouknul jsme se do googlu a nasel jsem tam jedno reseni v .NET. > Myslim, ze bych sel touto cestou. Sice to nebude nic zariveho, ale asi > to bude jistota. Uvedu zde onen kod: > > *************** > CREATE function swsAdmin.fn_WorkingDays > ( > @FromDate datetime, > @ToDate datetime > ) > RETURNS int > with encryption > as > begin > if(@FromDate > @ToDate) > return 0 > > Declare @WorkingDays int > Set @WorkingDays = 0 > > while(@FromDate <= @ToDate) > begin > -- do not count SA & SU > if((((@@datefirst + datepart(weekday, @FromDate) - 2) % > 7) + 1) < 6) > begin > Set @WorkingDays = @WorkingDays + 1 > end > > -- add one day > Set @FromDate = @FromDate + 1 > end > > return @WorkingDays > end > ************ > > Osobne bych jeste pridelal funkci, ktera by na argument typu Date(nebo > Calendar ... dle gusta) vracela, zda je pracovni ci ne. A nekde asi > udrzovat tabulku svatku .... > > > > Lukas Barton napsal(a): >> Ladislav Starý napsal(a): >>> Zdravim, >>> >>> nez zacnu vymyslet nejaky algoritmus, chtel bych se zeptat, jestli >>> se da nejakym elegantnim zpusobem zjistit pocet pracovnich dnu mezi >>> dvema kalendarnimi dny. >>> Pocet kalendarnich dnu jsem dokazal zjistit pomoci rozdilu >>> milisekund, ale jak to udelat s kalendarnimi dny, to me zatim nenapada. >>> >>> Zatim jsem uvazoval, ze bych postupne prochazel vsechny kalendarni >>> dny v tom intervalu a testoval, jestli je pracovni nebo ne. >>> Prijde mi ale hodne pomaly. Navic jeste budu muset resit statni svatky. >> Zjistit pocet pondeli-patku jde jeste vzoreckem. >> A pak musite mit nekde databazi svatbku a odecist, to co lezi mezi. >> Protoze pocet svatku se meni v case (napr. velikonoce, pridavaji se >> svatky nove, ....). >> >> Lukas >> >> >> >> >
-- -------------------------------------------------------------- Ing. Jan Novotný @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ http://blog.novoj.net Myšlenky dne otce Fura --------------------------------------------------------------
