Artigo extraído do site: www.planetadelphi.com.br
Autor: Andreano Lanusse (andreano.lanusse@codegear.com)
Funções da VCL para Data e Hora com Delphi
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.
|
|
|
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
|
|
|
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.
|
|
|
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).
|
|
|
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.