Buscar

Funções da vcl para data e hora com delphi

nome

Andreano Lanusse

Colunista ainda sem descrição. Caro colunista, por favor envie-nos sua descrição.

Amigos Delpheiros,
Em algum momento do dia-a-dia desenvolvendo aplicações, surge a necessidade de manipularmos datas e horários. Diante deste cenário, surgem determinadas dúvidas que requerem conhecimentos matemáticos. Para não nos deixar de cabelo em pé com estes cálculos, a VCL tem um vasto conjunto de classes e métodos que ajuda nestes cálculos. Neste artigo, vamos verificar que funções são essas e exemplificar através de situações reais a aplicabilidade das mesmas.

DateUtils a unit mágica
As classes e métodos que irão nos ajudar neste artigo fazem parte da unit DateUtils e foram testadas no Delphi 2005,2006 e 2007. A maior parte está disponível na versão 7 do Delphi também.
É importante saber que poderemos representar datas e horários através do tipo TDateTime, que mapeia um tipo double, onde a parte inteira corresponde a Data e a parte decimal corresponde a Hora. O tipo TDate ou TTime podem ser utilizados e estes mapeiam o TDateTime.
Se uma variável do tipo TDateTime recebe 0, a data equivalente será 30/12/1899 e a hora 00:00:00. Caso a data seja 29/12/1899 e o horário 06:00, o valor no formato double será -1.25, mas não será necessário trabalhar com números, pois a unit DateUtils irá ajudar muito.

Métodos para criação de datas
Ao criar ou ler variáveis do tipo TDateTime, muitos desenvolvedores se preocupam com o formato: DD/MM/AAAA, AAAA/DD/MM, MM/DD/AAAA.. Outras preocupações, em muitos casos, surgem devido ao formato de data da máquina. Mas esta preocupação não é necessária, pois basta saber utilizar os métodos EncodeDate, EncodeTime, DecodeDate.e DecodeTime.
O método EncodeDate nos ajuda a criar variáveis, passando como parâmetro: dia, mês e ano para o EncodeTime, também serão passados: hora, minuto, segundo e milesegundo.

// Criando uma Data
var
Data : TDateTime;
begin
Data := EncodeDate( 2006, 2, 28 );
ShowMessage( DateToStr(Data) );

Neste exemplo o showmessage irá exibir a data 28/2/2006, se no parâmetro dia do EncodeDate fosse passado dia 29 seria gerada uma Exception pois não existe dia 29 de fevereiro para 2006

// Lendo uma variável Data
var
Dia, Mes, Ano : Word;
begin

DecodeDate(Date, Ano, Mes, Dia);

ShowMessage( 'Dia : ' + InttoStr(Dia) + #13 +
'Mês : ' + InttoStr(Mes) + #13 +
'Ano : ' + InttoStr(Ano) );

Neste exemplo será apresentando Dia : 4 // Mês : 4 // Ano : 2006, independente da configuração de data e hora da máquina.

Calculando Dias
Calcular quantos dias existem entre duas datas, quantos dias na semana, quantos dias no mês, considerar o ano bissexto e outras informações são fundamentais quando você tem que fazer cálculo de juros, dias úteis e outros cálculos. Vejamos alguns métodos que podem nos ajudar.

// Quantos dias existem em cada mês do ano
Const
S : String = '%s: %d dias';
var
Y, M: Integer;
Meses: String;
begin

Y := 2006;
//Ano que estará sendo considerado neste exemplo
for M := 1 to 12 do
begin
Meses := Meses + Format(S, [ShortMonthNames[M],MonthDays[IsLeapYear(Y), M]]) +#13;
end;

ShowMessage(Meses);

O exemplo acima irá resultar em quantos dias existem em cada mês do ano de 2006. O resultado será:
jan: 31 dias // fev: 28 dias // mar: 31 dias // abr: 30 dias // mai: 31 dias // jun: 30 dias // jul: 31 dias // ago: 31 dias // set: 30 dias // out: 31 dias // nov: 30 dias // dez: 31 dias //
Perceba que utilizamos o array ShortMonthNames, que retorna o nome de cada mês, abreviado de acordo com o idioma do Windows. Você poderá sobrescrever os nomes dos meses para cada um deles, caso queira que sua aplicação utilize a sua maneira. Outro array utilizado é o MonthDays, que é bidimensional e irá retornar o número de dias para cada mês considerando o ano bisexto através do método IsLeapYear, que retorna True ou False (1 ou 0).

{Incrementando Dia, Mês, Ano, Semana, Hora, Minuto, Segundo, .....}
var
Y, M: Integer;
Hoje : TDateTime;
AnoQueVem : TDateTime;
begin

Hoje := Date; // considere que hoje é 25/04/2006

AnoQueVem := IncYear(Hoje, 1);

ShowMessage(DateToStr(AnoQueVem));
// resultado será 25/04/2007

O Exemplo acima irá incrementar a data de hoje em 1 ano: diversas são as funções para o incremento de data e hora, são elas:

Nome da Função
Unit
IncMonth SysUtils
IncAMonth SysUtils
IncYear DateUtils
IncWeek DateUtils
IncDay DateUtils
IncHour DateUtils
IncMinute DateUtils
IncSecond DateUtils
IncMilliSecond DateUtils
As funções acima certamente irão lhe ajudar nas operações com data e hora.
Outro grupo de funções muito útil é o relacionado a intervalos de data e hora. Todas as funções abaixo citadas estão na unit DateUtils e recebem um parâmetro do tipo TDateTime.
Nome da Função
Unit
YearsBetween Retorna o número de anos entre um intervalo
MonthsBetween Retorna o número de meses entre um intervalo
WeeksBetween Retorna o número de semanas entre um intervalo
DaysBetween Retorna o número de dias entre um intervalo
HoursBetween Retorna a quantidade de horas entre um intervalo
MinutesBetween Retorna a quantidade de minutos entre um intervalo
SecondsBetween Retorna a quantidade de segundos entre um intervalo
MilliSecondsBetween Retorna q quantidade de milesegundos entre um intervalo


Conclusão
Através deste artigo, mostramos algumas das dezenas de utilidades da unit DateUtils. Muitas outras existem, basta você abrir esta unit ou acessar o Help do Delphi para conhecer todas as suas outras funcionalidade.

Links
http://blogs.codegear.com/andreanolanusse
Este é o link para o meu blog, onde disponibilizo diversas informações.

http://www.borlandopenuniversity.com.br
Treinamentos via web sobre os produtos CodeGear como o Delphi estão disponíveis.

http://dn.codegear.com/br
Site de relacionamento da CodeGear com os desenvolvedores, possui diversos artigos e tutoriais em português.

http://www.codegear.com
Site oficial da CodeGear, contém todas as informações sobre os produtos da CodeGear.



Andreano Lanusse
(andreano.lanusse@codegear.com) é Product Line Manager da CodeGear para a América Latina, em Scotts Valley – Califórnia. É líder do time de evangelistas da CodeGear em toda América Latina, que trabalha ounvindo as solicitações das comunidades de desenvolvedores. Possui vasta experiência em desenvolvimento de aplicações, além de estar certificado em todos os produtos Borland/CodeGear e MCP em SQL Server e Windows 2000.



Publicidade

Vote no artigo




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes do artigo

Categoria: Outros
Adicionado dia: 15/04/07
Por: Andreano Lanusse
Visualizado: 83852 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009