[firebase-br] Of Of O fRe: Dias Uteis ... Of Of
Otto Fuchshuber
ottofuch em terra.com.br
Ter Ago 29 17:49:31 -03 2006
Vou salvar para futuras referências.
Câmbio e desligo.
[]´s
Otto
----- Original Message -----
From: "Prisma Sistemas - Moacir" <prismars em prismars.com.br>
To: "Gleyber" <cmesquita em cmsolucoes.com.br>; "FireBase"
<lista em firebase.com.br>
Sent: Tuesday, August 29, 2006 5:28 PM
Subject: Re: [firebase-br] Dias Uteis ...
Gleyber, Otto e todos os interessados:
Ai esta uma função em Delphi que uso para feriados fixos.
-------------------------------------------------------------------
Function Ve_Feriado(dData : TDateTime=0) : Boolean;
var
nMes : Integer;
y,m,d:Word;
G,I,J,C,H,L: Integer;
E:TDateTime;
dSexta : TDateTime;
dCarnaval : TDateTime;
ano : integer;
Const
FERIADOSFIXOS : Array [1..12] of String =('01~', // Jan
'', // Fev
'', // Mar
'21~', // Abr
'01~', // Mai
'', // Jun
'', // Jul
'', // Ago
'07~', // Set
'12~', // Out
'02~15~', // Nov
'25~'); // Dez
Begin
If dData=0 then
Result:=False
else
Begin
Try
nMes :=StrToInt(FormatDateTime('mm',dData));
except
nMes :=0;
end;
If (nMes<1) or (nMes>12) then
Result:=False
else
Result:=Pos(FormatDateTime('dd',dData),FERIADOSFIXOS[nMes] )<>0;
end;
//---- Calcula o Feriado de Carnaval e Sexta-Feira Santa
DecodeDate(dData, Y, M, D);
ano := y;
G := ano mod 19;
C := ano div 100;
H := (C-C div 4-(8*C+13) div 25 + 19*G+15)mod 30;
I := H-(H div 28)*(1-(H div 28)*(29 div(H+1))*((21-G)div 11));
J := (ano + ano div 4 +I+2-C+C div 4) mod 7;
L := I-J;
m := 3+(L+40) div 44;
d := L+28-31*(m div 4);
//y := ano;
E := EncodeDate(y,m,d);
While DayOfWeek(E)>1 do
E := E+1;
//--- Sexta-feira Santa
dSexta := E - 2;
//--- Carnaval
dCarnaval := E - 47;
If (dData = dSexta) Or (dData = dCarnaval) then
Result := True;
End;
-------------------------------------------------------------------
Espero que ajude.
[ ]´s
Moacir
Gleyber escreveu:
> Otto, só vc mesmo...
>
> Vou aproveitar a dica e fazer um componente para calcular sozinho para
mim.
>
> [ ]'s
> Gleyber
>
>
> ----- Original Message -----
> From: "Otto Fuchshuber" <ottofuch em terra.com.br>
> To: <renan em safetech.inf.br>; "FireBase" <lista em firebase.com.br>
> Sent: Tuesday, August 29, 2006 1:37 PM
> Subject: Re: [firebase-br] Dias Uteis ...
>
>
> Para calcular o dia da pásca em cada ano existe a seguinte rotina:
>
> Fonte: Revista Scientific American, Marco 2001, pagina 73
> Escolha um ano do calendario Gregoriano e chame-o de x. Para determinar
> a data da Pascoa execute os seguintes 10 calculos:
>
> 1. Dividir x por 19 para obter um quociente (que vamos ignorar) e um
resto
> A. Esta e' a posicao do ano no ciclo lunar de 19 anos (A+1 e' o
numero
> ouro do ano)
> 2. Dividir x por 100 para obter um quociente B e um resto C
> 3. Dividr B por 4 para obter um quociente D e um resto E
> 4. Dividr 8B + 13 por 25 para obter um quociente G e um resto que vamos
> ignorar
> 5. Dividir 19A + B - D - G + 15 por 30 para obter um quociente (que
vamos
> ignorar) e um resto H (o Epacs do ano e' 23-H quando H for menor do
que
> 24 e 53-H de outro modo)
> 6. Dividir A + 11H por 319 para obter um quociente M e um resto (que
vamos
> ignorar)
> 7. Dividir C por 4 para obter um quociente J e um resto K
> 8. Dividir 2E + 2J - K - H + M + 32 por 7 para obter um quociente (que
> vamos
> ignorar) e um resto L
> 9. Dividir H - M + L + 90 por 25 para obter um quociente N e um resto
(que
> vamos ignorar)
> 10. Dividir H - M + L + N + 19 por 32 para obter um quociente (que vamos
> ignorar e um resto P
>
> O domingo de Pascoa e' o P-esimo dia do N-esimo mes (N pode ser ou 3 para
> marco, ou 4 para abril). A letra dominical pode ser achada em
dividindo-se
> 2E + 2J - K por 7 e tomando-se o resto (um resto igual a 0 e' a letra A,
> 1 e' equivalente a B, e assim por diante).
>
> Experimentando este metodo para o ano x = 2001 obtemos (1)A=6; (2)B=20,C=1
> (3)D=5,E=0;(4)G=6;(5)H=18;(6)M=7;(7)J=0,K=1;(8)L=6;(9)N=4;(10)P=15
>
> Em 2001 a páscoa caiu em 15/04/2001.
> Em 2007 será no dia 08/04/2001
> Em 2010 será no dia 04/04/2010
> No ano 34 DC caiu em 26/03/2006
> Antes disto não havia páscoa.
>
> Segundo a Wikipedia,
> http://pt.wikipedia.org/wiki/P%C3%A1scoa
> "A Páscoa é celebrada no primeiro Domingo após a primeira Lua Cheia que
> ocorre depois do equinócio da Primavera"
> Lá existem outros algoritmos de cálculo, talvez menos exatos do que o
> apresentado na Cientific American
>
> Lá vem a turma da cultura ... {:-)
> Se quiser, lhe mando em PVT um pequeno programa em Visual Basic 6 que
efetua
> todos os cálculos.
>
> Otto
>
> ----- Original Message -----
> From: "Renan de Oliveira" <renan em safetech.inf.br>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Tuesday, August 29, 2006 10:51 AM
> Subject: Re: [firebase-br] Dias Uteis ...
>
>
> Sugiro que voce tenha uma tabela com os cadastros de feriados, do
contrário
> sera complicado, pois apesar de normalmente os feriados terem dias fixos,
a
> empresa pode optar por feriadões, férias, etc. depois tu monta um sql que
te
> tras os dias que nao forem sabado e domingo, e faz um join com essa tabela
> pra verificar se mesmo nao sendo sabado nem domingo é feriado ou nao
>
>
> Renan de Oliveira
> Safetech Informática
> (51) 3529-3870
> ----- Original Message -----
> From: "Firebird" <rubens.rodrigues em abrevo.com.br>
> To: <lista em firebase.com.br>
> Sent: Tuesday, August 29, 2006 10:33 AM
> Subject: [firebase-br] Dias Uteis ...
>
>
> Prezados Colegas,
>
> É possivel via SQL eu conseguir a qtde de dias úteis num determinado mês?
>
> Obrigado
>
> Rubens
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
> Esta mensagem foi verificada pelo E-mail Protegido Terra.
> Scan engine: McAfee VirusScan / Atualizado em 28/08/2006 / Versão:
> 4.4.00/4839
> Proteja o seu e-mail Terra: http://mail.terra.com.br/
>
>
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Esta mensagem foi verificada pelo E-mail Protegido Terra.
Scan engine: McAfee VirusScan / Atualizado em 29/08/2006 / Versão:
4.4.00/4840
Proteja o seu e-mail Terra: http://mail.terra.com.br/
Mais detalhes sobre a lista de discussão lista