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
--------------------------------------------------------------

Odpovedet emailem