You are on page 1of 3

Amigos Delpheiros, Em algum momento do dia-a-dia desenvolvendo aplicaes, surge a necessidade de manipularmos datas e horrios.

Diante deste cenrio, surgem determinadas dvidas que requerem conhecimentos matemticos. Para no nos deixar de cabelo em p com estes clculos, a VCL tem um vasto conjunto de classes e mtodos que ajuda nestes clculos. Neste artigo, vamos verificar que funes so essas e exemplificar atravs de situaes reais a aplicabilidade das mesmas.
DateUtils a unit mgica

As classes e mtodos que iro nos ajudar neste artigo fazem parte da unit DateUtils e foram testadas no Delphi 2005,2006 e 2007. A maior parte est disponvel na verso 7 do Delphi tambm. importante saber que poderemos representar datas e horrios atravs 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 varivel 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 horrio 06:00, o valor no formato double ser 1.25, mas no ser necessrio trabalhar com nmeros, pois a unit DateUtils ir ajudar muito.
Mtodos para criao de datas

Ao criar ou ler variveis do tipo TDateTime, muitos desenvolvedores se preocupam com o formato: DD/MM/AAAA, AAAA/DD/MM, MM/DD/AAAA.. Outras preocupaes, em muitos casos, surgem devido ao formato de data da mquina. Mas esta preocupao no necessria, pois basta saber utilizar os mtodos EncodeDate, EncodeTime, DecodeDate.e DecodeTime. O mtodo EncodeDate nos ajuda a criar variveis, passando como parmetro: dia, ms e ano para o EncodeTime, tambm sero 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 parmetro dia do EncodeDate fosse passado dia 29 seria gerada uma Exception pois no existe dia 29 de fevereiro para 2006 // Lendo uma varivel Data var Dia, Mes, Ano : Word; begin DecodeDate(Date, Ano, Mes, Dia); ShowMessage( 'Dia : ' + InttoStr(Dia) + #13 + 'Ms : ' + InttoStr(Mes) + #13 + 'Ano : ' + InttoStr(Ano) ); Neste exemplo ser apresentando Dia : 4 // Ms : 4 // Ano : 2006, independente da configurao de data e hora da mquina.
Calculando Dias

Calcular quantos dias existem entre duas datas, quantos dias na semana, quantos dias no ms, considerar o ano bissexto e outras informaes so fundamentais quando voc tem que fazer clculo de juros, dias teis e outros clculos. Vejamos alguns mtodos que podem nos ajudar. // Quantos dias existem em cada ms 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 ms 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 ms, abreviado de acordo com o idioma do Windows. Voc poder sobrescrever os nomes dos meses para cada um deles, caso queira que sua aplicao utilize a sua maneira. Outro array utilizado o MonthDays, que bidimensional e ir retornar o nmero de dias para cada ms considerando o ano bisexto atravs do mtodo IsLeapYear, que retorna True ou False (1 ou 0). {Incrementando Dia, Ms, 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 so as funes para o incremento de data e hora, so elas:
Nome da Funo IncMonth IncAMonth IncYear IncWeek IncDay IncHour IncMinute IncSecond IncMilliSecond Unit SysUtils SysUtils DateUtils DateUtils DateUtils DateUtils DateUtils DateUtils DateUtils

As funes acima certamente iro lhe ajudar nas operaes com data e hora. Outro grupo de funes muito til o relacionado a intervalos de data e hora. Todas as funes abaixo citadas esto na unit DateUtils e recebem um parmetro do tipo TDateTime.
Nome da Funo YearsBetween MonthsBetween WeeksBetween DaysBetween HoursBetween MinutesBetween SecondsBetween MilliSecondsBetween Concluso Unit Retorna o nmero de anos entre um intervalo Retorna o nmero de meses entre um intervalo Retorna o nmero de semanas entre um intervalo Retorna o nmero de dias entre um intervalo Retorna a quantidade de horas entre um intervalo Retorna a quantidade de minutos entre um intervalo Retorna a quantidade de segundos entre um intervalo Retorna q quantidade de milesegundos entre um intervalo

Atravs 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 informaes. http://www.borlandopenuniversity.com.br Treinamentos via web sobre os produtos CodeGear como o Delphi esto disponveis.

http://dn.codegear.com/br Site de relacionamento da CodeGear com os desenvolvedores, possui diversos artigos e tutoriais em portugus. http://www.codegear.com Site oficial da CodeGear, contm todas as informaes sobre os produtos da CodeGear.