quarta-feira, 1 de setembro de 2010

Fazendo cálculo de horas

var
    hora1: TDateTime;
    hora2: TDateTime;
    total: TDateTime;
begin
    hora1 := StrToTime(Edit1.Text);
    hora2 := StrToTime(Edit2.Text);
    total := Hora2 - Hora1;
    Label1.Caption := FormatDateTime('hh:nn:ss',total);
end;

Descobrir se uma data é fim do mês

Esta função retorna true se a data passada como parâmetro é fim de mês. Retorna false caso contrário.

Inclua na seção uses: SysUtils

function tbFimDoMes(const Data: TDateTime): boolean;
var
  Ano, Mes, Dia: Word;
begin
  DecodeDate(Data +1, Ano, Mes, Dia);
  Result := Dia = 1;
end;

terça-feira, 31 de agosto de 2010

Definir data/hora de um arquivo

Inclua na seção uses: SysUtils

{ Esta função altera a data e hora de um arquivo. Se obter sucesso retorna true, caso contrário retorna false. }
function DefineDataHoraArq(NomeArq: string; DataHora: TDateTime): boolean;
var
  F: integer;
begin
  Result := false;
  F := FileOpen(NomeArq, fmOpenWrite or fmShareDenyNone);
  try
  if F > 0 then
  Result := FileSetDate(F, DateTimeToFileDate(DataHora)) = 0;
  finally
  FileClose(F);
  end;
end;
{ Exemplo de uso 1: Usa a data atual do sistema (Now) }

if DefineDataHoraArq('c:\teste\logo.bmp', Now) then
  ShowMessage('Data/Hora do arquivo definida com sucesso.')
else
  ShowMessage('Não foi possível definir data/hora do arquivo.');

{ Exemplo de uso 2: Usa uma data fixa }
var
  DataHora: TDateTime;
begin
  { Define a data para 5-Fev-1999 e a hora para 10:30 }
  DataHora := EncodeDate(1999, 2, 5) + EncodeTime(10, 30, 0, 0);
  if DefineDataHoraArq('c:\teste\logo.bmp', DataHora) then
  ShowMessage('Data/Hora do arquivo definida com sucesso.')
  else
  ShowMessage('Não foi possível definir data/hora do arquivo.');
end;

Converte hora (formato HH:MM) para minutos

Function HoraToMin(Hora: String): Integer;
begin
    Result := (StrToInt(Copy(Hora,1,2))*60) + StrToInt(Copy(Hora,4,2));
end;

Como saber se o ano é bisexto

function TForm1.AnoBiSexto(Ayear: Integer): Boolean;
begin
    Result := (AYear mod 4 = 0) and ((AYear mod 100 <> 0) or
    (AYear mod 400 = 0));
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
    if AnoBiSexto(1999) Then
        ShowMessage('Ano de 1999 é Bisexto')
    Else ShowMessage('Ano de 1999 não é Bisexto');
end;

Como saber quantos dias tem no mes

function TForm1.AnoBiSexto(Ayear: Integer): Boolean;
begin
    // Verifica se o ano é Bi-Sexto
    Result := (AYear mod 4 = 0) and ((AYear mod 100 <> 0) or
    (AYear mod 400 = 0));
end;
 
function TForm1.DiasPorMes(Ayear, AMonth: Integer): Integer;
const DaysInMonth: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
begin
    Result := DaysInMonth[AMonth];
    if (AMonth = 2) and AnoBiSexto(AYear) then
    Inc(Result);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
    Label1.Caption := IntToStr(DiasPorMes(1999, 10));
end;

Como formatar data para exibição por extenso

O Delphi permite formatar datas para apresentação por extenso de forma bastante simples. Vejamos os seguintes exemplos:

Para formatar a data 18/03/1999, podemos utilizar:

No create do form colocar

Shortdateformat:=

dddd, dd/mm/yyyy = Quinta, 18/03/1999
dd/mmm/yyyy = 18/Mar/1999
dddd, dd" de "mmmm" de "yyyy = Quinta, 18 de Março de 1999
dd" de "mmmm" de "yyyy, dddd = 18 de Março de 1999, Quinta

Curso de Delphi: 7.Consultas SQL