Lidar com datas é uma necessidade presente na maioria dos sistemas, principalmente os comerciais em que existem diversos cadastros e relatórios que utilizam datas como filtros.
Neste post, veremos como trabalhar com duas das principais funções do Delphi para manipular datas: EncodeDate e DecodeDate.
DecodeDate é um procedure contido na unit SysUtils que recebe uma data, que se deseja separar, e mais três parâmetros por referência que receberão o valor do dia, mês e ano da data informada. Sua assinatura é a seguinte:
procedure DecodeDate(const Date: TDateTime; var Year:Word; var Month:Word; var Day:Word);
Note que os argumentos Year, Month e Day são recebidos por referência (por isso aparecem precedidos da palavra reservada var), pois serão alteradas dentro do procedure.
EncodeDate também está contida na unit SysUtils e é uma function que atua de forma inversa à DecodeDate, recebendo três argumentos que representam o ano, o mês e o dia e retorna uma data composta por essas partes. Sua assinatura é a seguinte:
function EncodeDate(Year:Word; Month:Word; Day:Word):TDateTime;
Para compreender melhor o funcionamento dessas funções, vamos criar uma aplicação VCL Forms no Delphi. Primeiramente, adicione um botão e três labels, que devem ser nomeados como lblDia, lblMes e lblAno. No evento OnClick do botão, codifique conforme a Listagem 1.
Listagem 1: Exemplo de uso do DecodeDate
procedure TForm2.Button1Click(Sender: TObject);
var
dia, mes, ano : Word;
begin
DecodeDate(Date, ano, mes, dia);
lblDia.Caption := 'Dia: ' + IntToStr(dia);
lblMes.Caption := 'Mês: ' + IntToStr(mes);
lblAno.Caption := 'Ano: ' + IntToStr(ano);
end;
Ao executar a aplicação e clicar no botão, teremos nos labels, separadamente, o dia, o mês e o ano da data atual (a função Date retorna um TDateTime com a data atual), semelhante à Figura 1.
Figura 1: Exemplo de uso do DecodeDate
Para testar o EncodeDate, precisaremos de apenas um label, que chamaremos de lblData e no OnClick do botão codificaremos de acordo com a Listagem 2. Note que podemos montar uma data a partir de valores separados, desde que esses parâmetros formem uma data válida.
Listagem 2: Exemplo de uso do EncodeDate
procedure TForm2.Button1Click(Sender: TObject);
var
dia, mes, ano : Word;
data : TDateTime;
begin
ano := 2015;
mes := 2;
dia := 15;
data := EncodeDate(ano, mes, dia);
lblData.Caption := 'Data: ' + DateToStr(data);
end;
O resultado é mostrado na Figura 2.
Figura 2: Exemplo de uso do EncodeDate
As possibilidades de uso destas funções são as mais diversas possíveis. Por exemplo, imagine que precisamos montar um relatório cujo período de filtro deve ser sempre do primeiro dia do mês corrente até o dia atual. Poderíamos usar a função DecodeDate para pegar o ano e mês atuais, e depois usar o EncodeDate para criar a primeira data com esses valores e o dia 1. Na Listagem 3 temos o código deste exemplo, seguido do resultado na Figura 3.
Listagem 3: Exemplo prático de uso
procedure TForm2.Button1Click(Sender: TObject);
var
dia, mes, ano : Word;
dataInicial : TDateTime;
begin
DecodeDate(Date, ano, mes, dia);
dataInicial := EncodeDate(ano, mes, 1);
lblDataInicial.Caption := 'Início: ' + DateToStr(dataInicial);
lblDataFinal.Caption := 'Fim: ' + DateToStr(Date);
end;
Figura 3: Exemplo prático de uso
Certamente você já precisou trabalhar com datas em suas aplicações. Agora, poderá explorar essas funções e utilizá-las em diversas situações.