You are on page 1of 7

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

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 DateU
tils 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

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

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;

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

Meses: String;
begin

Y := 2006 ; //Ano que estará sendo considerado neste


for M := 1 to 12 do
begin
Meses := Meses + Format(S, [ShortMonthNames[M],MonthDa
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, Segun
var
Y, M: Integer;

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

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

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

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

anosentre
YearsBetween
Retorna o númeroumdeintervalo
meses
MonthsBetween
Retorna o número
entre um
deintervalo
semanas
WeeksBetween
Retorna o número
entre um
deintervalo
dias
DaysBetween
Retorna o número
entre umdeintervalo
horas
HoursBetween
Retorna a quantidade
entre um intervalo
de
minutos
MinutesBetween
Retorna a quantidade
entre um intervalo
de
segundos
SecondsBetween
Retorna a quantidade
entre um intervalo
de
milesegundos
MilliSecondsBetween
Retorna q quantidade
entre um intervalo
de

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

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

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

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

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.

por: Andreano Lanusse

7/7

You might also like