Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 14 de Janeiro de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
146 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Cálculos com Data e Hora
Publicado por ActiveDelphi : Quinta, Fevereiro 01, 2007 - 12:03 GMT-3 (12478 leituras)
Comentários comentar   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Gustavo Frassini Neste artigo veremos alguns procedimentos e funções úteis para cálculo de variáveis do tipo Date e Time. Para a utilização destes obrigatoriamente precisamos declarar a biblioteca DateUtils, na seção uses da Unit em questão.

Salve colegas delphianos. Bom passado as festas de início de ano e as férias também, vamos ao trabalho.
Para iniciar a série de artigos deste ano, vou começar com um artigo mais básico, onde veremos alguns procedimentos e funções úteis para cálculo de variáveis do tipo Data e Time. Para a utilização destes obrigatoriamente precisamos declarar a biblioteca DateUtils, na seção uses da Unit em questão.
 

 
function DayOfTheMonth(const Date: TDateTime): Word;
Retorna o número do índice do dia para mês. Este índice possui valores entre 1 e 31;
Ex:
ShowMessage('O dia do mês é = '+IntToStr(DayOfTheMonth(Date)));
 
function DayOfTheWeek(const Date: TDateTime): Integer;
Esta função retorna o número do índice do dia para a semana. O índice possui valores entre 1 e 7, de acordo com a ordem abaixo:
Ex.:
var
   VetDias: array[1..7] of String;
begin
   VetDias[1] := 'Segunda-Feira';
   VetDias[2] := 'Terça-Feira';
   VetDias[3] := 'Quarta-Feira';
   VetDias[4] := 'Quinta-Feira';
   VetDias[5] := 'Sexta-Feira';
   VetDias[6] := 'Sábado';
   VetDias[7] := 'Domingo';
   ShowMessage('Hoje é '+VetDias[DayOfTheWeek(Date)]);
end;
 
function DayOfTheYear(const Date: TDateTime): Word;
Esta função retorna o número do índice do dia para o ano. O índice possui valores entre 1 e 366:
Ex.:
ShowMessage('Hoje '+DateToStr(Date)+' é o ' + IntToStr(DayOfTheYear(Date)) + ' dia do ano.');
 
function DayOfWeek(Date: TDateTime): Integer;
Esta função retorna o número do índice do dia para a semana. O índice possui valores entre 1 e 7, ao contrário da função DayOfTheWeek, esta tem seu índice iniciando por 1 = Domingo e terminando com 7 = Sábado.
Ex.:
ShowMessage('Hoje é '+LongDayNames[DayOfWeek(date)]);
 
function DaysBetween(const DataInicio, DataFim: TDateTime): Integer;
Esta função retorna a diferença de dias entre duas datas passadas como parâmetro. Para o retornar o resultado a função leva em consideração as horas também, ou seja, a cada 24 horas um dia.
Ex.:
var DataAnterior: TDateTime;
begin
  DataAnterior := EncodeDateTime(2007, 01, 29, 0, 0, 0, 0);
  ShowMessage('A diferença de dias entre as datas é de '+
  IntToStr(DaysBetween(DataAnterior, now))+' dia');
end;
 
Verifique aqui as seguintes funções também: YearsBetween, MonthsBetween, HoursBetween, MinutesBetween, SecondsBetween.
Ex.:
var DataAnterior: TDateTime;
begin
  DataAnterior := EncodeDateTime(2006, 01, 29, 0, 0, 0, 0);
  ShowMessage('A diferença de dias entre as datas é de '+ IntToStr(DaysBetween(DataAnterior, now))+' dia.');
  ShowMessage('A diferença de dias entre as datas é de '+ IntToStr(YearsBetween(DataAnterior, now))+' anos.');
  ShowMessage('A diferença de dias entre as datas é de '+ IntToStr(MonthsBetween(DataAnterior, now))+' meses.');
  ShowMessage('A diferença de dias entre as datas é de '+ IntToStr(HoursBetween(DataAnterior, now))+' horas.');
  ShowMessage('A diferença de dias entre as datas é de '+ IntToStr(MinutesBetween(DataAnterior, now))+' minutos.');
  ShowMessage('A diferença de dias entre as datas é de '+ IntToStr(SecondsBetween(DataAnterior, now))+' segundos.');
end; 
 
function DaysInAMonth(const Ano, Mes: Word): Word;
Esta função retorna o número de dias em um determinado mês.
Ex.:
ShowMessage('Dias em Janeiro de 2007 = '+IntToStr(DaysInAMonth(2007, 1)));
 
function DaysInAYear(const Ano: Word): Word;
Nesta função será retornado o número de dias em um determinado ano.
Ex.:
ShowMessage('2007 terá '+IntToStr(DaysInAYear(2007))+' dias.');
 
function DaySpan(const DataInicio, DataFim: TDateTime): Double;
Esta função retorna em numero fracionários a diferença entre data inicial e final. Por exemplo, se o resultado for 2 dias e 12 horas, o retorno será de 2.50.
Ex.:
var minhadatainicial, minhadatafinal : TDateTime;
begin
   minhadatainicial := EncodeDateTime(2007, 01, 29, 0, 0, 0, 0);
   minhadatafinal := EncodeDateTime(2007, 01, 31, 06, 0, 0, 0);
   ShowMessage('Diferença fracionada entre datas = '+FloatToStrF(DaySpan(minhadatainicial, minhadatafinal),fffixed,8,2)+' dias.');
end;
 
function FileAge(const FileName: string): Integer;
Nesta função será retornada a última data de modificação de um arquivo no formato inteiro. Para chamar esta função, não é necessária abertura e fechamento do arquivo. Se o arquivo não for encontrado no local especificado será retornado -1.
Ex.:
var dataArquivo: Integer;
begin
  dataArquivo := FileAge('c:\meuarquivo.txt');
  if dataArquivo > -1 then
    ShowMessage('c:\meuarquivo.txt foi modificado pela última vez em: '+   DateToStr(FileDateToDateTime(dataArquivo)))
  else
    ShowMessage('Arquivo não encontrado.');
end;
 
function FileSetDate(const FileName: string; FileAge: Integer): Integer;
Esta função seta uma nova data de modificação para o arquivo.
Ex.:
var dataArquivo: Integer;
begin
  dataArquivo := FileAge('c:\meuarquivo.txt');
  if dataArquivo > -1 then begin
    FileSetDate('c:\meuarquivo.txt',DateTimeToFileDate(Date));
    dataArquivo := FileAge('c:\meuarquivo.txt');
    ShowMessage('c:\meuarquivo.txt foi modificado pela última vez em: '+   DateToStr(FileDateToDateTime(dataArquivo)))
  end else
    ShowMessage('Arquivo não encontrado.');
  end;

Esta função também pode ser utilizado desta forma, function FileSetDate(FileHandle: Integer; FileAge: Integer): Integer; para tal teremos que utilizar a função FileOpen.
 
function IncDay(const AValue: TDateTime; const ANumberOfDays: Integer = 1): TDateTime;
Esta função retorna a data passada como parâmetro, acrescida/decrescida dos dias passados, também como parâmetro.
Ex.:
begin
  ShowMessage('Data + 10 Dias: '+DateToStr(IncDay(date,10)));
  ShowMessage('Data - 15 Dias: '+DateToStr(IncDay(date,-15)));
end;
 
function IncMilliSecond(const AValue: TDateTime; const ANumberOfMilliSeconds: Int64 = 1): TDateTime;
Esta função retorna o tempo passado como parâmetro acrescido/decrescido dos “milisegundos” passados, também como parâmetro.
Ex.:
var minhaData : TDateTime;
begin
  minhaData := now;
  ShowMessage('Minha Data: '+DateTimeToStr(minhaData));
  minhaData := IncMillisecond(minhaData, 7000);
  ShowMessage('Minha Data + 7000 milliseconds = '+DateTimeToStr(minhaData));
  minhaData := IncMillisecond(minhaData, -3000);
  ShowMessage('Minha Data - 3000 milliseconds = '+DateTimeToStr(minhaData));
end;
 
function IncMinute(const AValue: TDateTime; const ANumberOfMinutes: Int64 = 1): TDateTime;
Esta função retorna o tempo passado como parâmetro, acrescido/decrescido dos minutos passados, também como parâmetro a função.
Ex.:
var minhaData : TDateTime;
begin
  minhaData := now;
  ShowMessage('Minha Data: '+DateTimeToStr(minhaData));
  minhaData := IncMinute(minhaData, 15);
  ShowMessage('Minha Data + 15 minutos = '+DateTimeToStr(minhaData));
  minhaData := IncMinute(minhaData, -10);
  ShowMessage('Minha Data - 10 minutos = '+DateTimeToStr(minhaData));
end;
 
function IncMonth(const Date: TDateTime; NumberOfMonths: Integer = 1): TDateTime;
Esta função retorna o tempo passado como parâmetro, acrescido/decrescido do número de meses passados, também como parâmetro a função.
Ex.:
var minhaData : TDateTime;
begin
  minhaData := now;
  ShowMessage('Minha Data: '+DateTimeToStr(minhaData));
  minhaData := IncMonth(minhaData, 2);
  ShowMessage('Minha Data + 2 meses = '+DateTimeToStr(minhaData));
  minhaData := IncMonth(minhaData, -1);
  ShowMessage('Minha Data - 1 mês = '+DateTimeToStr(minhaData));
end;
 

function IncSecond(const AValue: TDateTime; const ANumberOfSeconds: Int64 = 1): TDateTime;
Esta função retorna o tempo passado como parâmetro, acrescido/decrescido da quantidade de segundos também passados como parâmetro a função.
Ex.:
var minhaData : TDateTime;
begin
  minhaData := now;
  ShowMessage('Minha Data: '+DateTimeToStr(minhaData));
  minhaData := IncSecond(minhaData, 30);
  ShowMessage('Minha Data + 30 seg. = '+DateTimeToStr(minhaData));
  minhaData := IncSecond(minhaData, -20);
  ShowMessage('Minha Data - 20 seg. = '+DateTimeToStr(minhaData));
end;
 
function IncYear(const AValue: TDateTime; const ANumberOfYears: Integer = 1): TDateTime;
Esta função retorna o tempo passado como parâmetro, acrescido/decrescido do número de anos também passados como parâmetro a função.
Ex.:
var minhaData : TDateTime;
begin
  minhaData := now;
  ShowMessage('Minha Data: '+DateTimeToStr(minhaData));
  minhaData := IncYear(minhaData, 2);
  ShowMessage('Minha Data + 2 anos = '+DateTimeToStr(minhaData));
  minhaData := IncYear(minhaData, -1);
  ShowMessage('Minha Data - 1 ano = '+DateTimeToStr(minhaData));
end;
 
function IsLeapYear(Year: Word): Boolean;
Função que retorna se o ano passado como parâmetro é ou não bissexto.
Ex.:
if IsLeapYear(2007) then
  ShowMessage('2007 é ano bissexto')
else
  ShowMessage('2007 não é ano bissexto');
 
SecsPerDay / MinsPerDay / HoursPerDay
Funções que retornam respectivamente a quantidade de segundos em um dia, minutos em um dia e horas em um dia.
Ex.:
ShowMessage('O dia tem '+IntToStr(HoursPerDay)+' horas.');
ShowMessage('O dia tem '+IntToStr(MinsPerDay)+' minutos.');
ShowMessage('O dia tem '+IntToStr(SecsPerDay)+' segundos.');
 
function MonthOfTheYear(const Date: TDateTime): Word;
Esta função retorna o índice do mês da data passada como parâmetro. Este retorno está entre 1 = Janeiro e 12 = Dezembro.
Ex.:
ShowMessage('O mês da data atual é '+LongMonthNames[ (MonthOfTheYear(date)) ]);
 
Outras funções interessantes:
var
minhadatainicial, minhadatafinal : TDateTime;
begin
  ShowMessage('Horas decorridas até hoje no ano = ' + IntToStr(HourOfTheYear(date)));
  ShowMessage('Horas decorridas até hoje no mês = ' + IntToStr(HourOfTheMonth(date)));
  minhadatainicial := EncodeDateTime(2007, 01, 29, 0, 0, 0, 0);
  minhadatafinal := EncodeDateTime(2007, 01, 31, 06, 0, 0, 0);
  ShowMessage('Diferença fracionada entre datas = '+FloatToStrF(HourSpan(minhadatainicial, minhadatafinal), fffixed, 8, 2) + ' horas.');
  ShowMessage('Diferença fracionada entre datas = '+FloatToStrF(MinuteSpan(minhadatainicial, minhadatafinal), fffixed, 8, 2)+' minutos.');
  ShowMessage('Diferença fracionada entre datas = '+FloatToStrF(SecondSpan(minhadatainicial, minhadatafinal), fffixed, 8, 2)+' segundos.');
  ShowMessage('Ontem era '+LongDayNames[DayOfWeek(YesterDay)]);
  ShowMessage('Amanha será '+LongDayNames[DayOfWeek(Tomorrow)]);
  case CompareDateTime(minhadatainicial,minhadatafinal) of
    -1: ShowMessage('Data inicio menor que data fim.');
    0 : ShowMessage('Datas iguais.');
    1 : ShowMessage('Data inicio maior que data fim.');
  end;
  ShowMessage('Hoje é a '+ IntToStr(NthDayOfWeek(Date)) + 'ª ' + LongDayNames[DayOfWeek(Today)]+' do mês.');
end;

 
Estas são apenas algumas funções de cálculo com datas, em alguns momentos foram abordadas funções e/ou procedimentos para conversão de datas, mas este não é o objetivo do artigo. Outras funções não muito utilizadas para cálculo com datas também não foram abordadas, visto o tamanho do artigo.
 
Espero que o conteúdo acima veja a ajudar e tirar algumas dúvidas, principalmente do pessoal iniciante.

Clique aqui para fazer o download dos fontes.
 
Até a próxima.

Gustavo Frassini - gustavo@activedelphi.com.br
 



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados