Morfik - Operações úteis com Datas
Rotinas úteis para cálculos e informações sobre datas com Morfik.
Olá,
Neste artigo você verá três funções muito utilizadas em vários sistemas.
A primeira dica é para obtermos a data do dia da páscoa de qualquer ano, isto é feito geralmente para obter outros feriados e assim efetuar cálculos específicos com datas. A função é um tanto complexa, mas se você estuda-la com certeza irá conseguir entender e até melhora-la caso julgue necessário.
Function Pascoa(ano: integer):TDate;
var
y,m,d: word;
g,i,j,c,h,l: integer;
e: TDate;
begin
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);
Result := E;
end;
Como utilizar?
var
dPascoa : TDateTime;
Begin
dPascoa := Pascoa(2011); // Passamos o ano 2011
Showmessage(' Em 2011 a páscoa é ' +
' dia ' + IntToStr(dPascoa.Day) + // Retornamos somente o dia da data
' de ' + FormatDateTime('mmmm', dPascoa) ); // Retornamos o nome do mês formatado da data
End;
A Segunda dica é para detectar se a data informada é o último dia do mês.
A lógica desta função é bem simples, acrescentando um dia a data informada, se o dia for igual a 1, então esta data certamente é o último dia do mês.
function FimDoMes(Data: TDateTime): boolean;
var
Ano, Mes, Dia: Word;
begin
DecodeDate(Data.AddDay(1) , Ano, Mes, Dia);
Result := Dia = 1;
end;
Como utilizar?
var
dData : TDateTime;
Begin
dData := Now; // obtém a data atual
if FimDoMes(dData) then
Showmessage(‘ A Data: ‘ + DateToStr(dData) + ‘ é final do mês’)
Else
Showmessage(‘ A Data: ‘ + DateToStr(dData) + ‘ não é o final do mês’);
End;
E a terceira e última dica é para obter o próximo dia útil de uma data.
Neste caso também não é muito difícil, a lógica é: dado uma data, obtém o número que representa o dia da semana 1= Segunda 7=Domingo, em seguida aplica um incremento/decremento à data retornando como próximo dia útil.
function ProximoDiaUtil(Data : TdateTime) : TDateTime;
var
iProximoDia : integer;
begin
// Obtém o dia da semana mais um
iProximoDia := Data.DayOfTheWeek + 1;
if iProximoDia = 6 then // é um sábado
Result := data.AddDay(3)
else if iProximoDia = 7 then // é um Domingo
Result := data.AddDay(2)
else
Result := data.AddDay(1);
end;
var
dData : TDateTime;
Begin
dData := Now; // obtém a data atual
Showmessage(‘ O próximo dia útil será em ‘ + DateToStr(ProximoDiaUtil(dData)));
End;
Simples assim!
Carlos Eduardo Paulino
cadumicro@hotmail.comArtigos relacionados
-
DevCast
-
DevCast
-
DevCast
-
DevCast
-
DevCast