quarta-feira, 3 de novembro de 2010

Trabalhando com horas

Se você esta querendo fazer um acumulador de horas, você pode criar dois acumuladores, um para horas, e, outro para minutos.

 

Exemplo:

 

Type

TypeHora:Array[1..2] of interger;

 

Procedure Acumula:TypeHora;

Var

Hora,minuto:Integer;

Begin

  Hora:=Hora+StrToInt(Copy(DateTimeToStr(Time()),1,2));

  Minuto:=Minuto+StrToInt(Copy(DataTimeToStr(Time()),4,5));

  If Minuto >= 60 Then Begin

      Hora:=Hora+1;

      Minuto:=0;

  end;

  Acumula[1]:=Hora;

  Acumula[2]:=Minuto;

End;

Desta forma voce pode armazemar por exemplo o numero de horas que uma pessoa trabalhou durante o mes...

Validar datas

try

   StrToDate(Edit1.Text); //--Entre parenteses informar a data a ser validada.

except

   on EConvertError do

   ShowMessage ('Data Inválida!');

end;

Obtendo o extenso do mês passado por parâmetro

Function MesExtenso (xMes : Variant) : string;

Var

  Dia, Mes, Ano : Word;

begin

  Mes := 0;

  Case VarType (xMes) of

  VarDate : DecodeDate (xMes, Ano, Mes, Dia);

  VarString :

  Try

   Mes := StrToInt (xMes);  

  Except

  End;

  else

  Try

   Mes := Round (xMes);

  Except

  End;

end;

 case Mes of

 1: Result := 'Janeiro';

 2: Result := 'Fevereiro';

 3: Result := 'Março';

 4: Result := 'Abril';

 5: Result := 'Maio';

 6: Result := 'Junho';

 7: Result := 'Julho';

 8: Result := 'Agosto';

 9: Result := 'Setembro';

 10: Result := 'Outubro';

 11: Result := 'Novembro';

 12: Result := 'Dezembro';

 else

  Result := '';

 end;

end;

 

Obtendo o próximo dia útil caso a data informada caia em um fim de semana

Function ProximoDiaUtil (dData : TDateTime) : TDateTime;

begin

    if DayOfWeek(dData) = 7 then

         dData := dData + 2

    else

    if DayOfWeek(dData) = 1 then

         dData := dData + 1;

    ProximoDiaUtil := dData;

end;

 

Quantos fins de semana já se passaram no corrente ano

A função abaixo retorna quantos finais de semana já se passaram no ano corrente:

 

function WeekNum(const TDT:TDateTime) : Word;

var

                Y,M,D:Word;

                dtTmp:TDateTime;

begin

                DecodeDate(TDT,Y,M,D);

                dtTmp := EnCodeDate(Y,1,1);

                Result := (Trunc(TDT-dtTmp)+(DayOfWeek(dtTmp)-1)) DIV 7;

                if Result = 0 then begin

                       Result := 51

                end

                else

                begin

                       Result := Result-1;

                end;

End;