Recentemente precisei de uma função que me retornasse a data e a hora oficial do Brasil, para que eu pudesse alterar o relógio do windows. Como só achei informações desencontradas, criei uma rotina e gostaria de compartilhar com vocês
Obs 1: Caso você tenha alguma solução mais elegante,
comente no final deste material ou entre em contato!
Obs 2: O código está todo comentado e é de fácil compreensão.
//Testado com Delphi 7
{incluir na cláusula USES da Unit:
OleCtrls,
SHDocVw,
WIninet,
IdBaseComponent,
IdComponent,
IdTCPConnection,
IdTCPClient,
IdHTTP,
DateUtils}
procedure AjustaDataHoraPelaInternet;
var
Pagina, s: String;
texto: TMemo;
IdHTTP1: TIdHTTP;
ano, mes, dia, hora, min, seg, mil: Word;
DataCerta: TDateTime;
DataHora: TSystemTime;
begin
//pega a hora do sistema
DecodeDateTime(Now,ano, mes, dia, hora, min, seg, mil);
//criar em runtime o memo
texto := TMemo.Create(Self);
texto.Parent := Self;
texto.Visible := False; //pra que mostrar o memo, né?
Repaint;
//criar em runtime IdHTTP
IdHTTP1 := TIdHTTP.Create(Self);
//tenta carregar o código fonte da pagina
try
//usei esta página pra pegar as informações
Pagina:= IdHTTP1.Get('http://pcdsh01.on.br/HoraLegalBrasileira.asp');
//adicionar o código fonte no memo
texto.Lines.Add(Pagina);
//confere se o memo não está vazio
if pos('http://',Texto.lines.text)> 0 then
begin
//copia do memo o que está entre "#ffcc66>" e
//"" <-- é data e a hora no código fonte
s := copy(texto.lines.text,pos('#ffcc66>', texto.lines.text), pos('',texto.lines.text)-1);
//retira caracteres no início e no final da string que
não seja data e hora
s := copy(s,pos('#ffcc66>',s)+11,pos('',s)-12);
//converte pra dentro da
variável
DataCerta:= StrToDateTime(s);
//decodifica o timestamp
DecodeDateTime(DataCerta,ano, mes, dia, hora, min, seg, mil);
end
except
//nao conectado na internet, pega hora local mesmo
end;
//ajustar data e hora
with DataHora do
begin
wYear := Ano;
wMonth := Mes;
wDay := Dia;
wHour := Hora;
wMinute := Min;
wSecond := Seg;
wMilliseconds := Mil;
end;
SetLocalTime(DataHora);
//libera os componentes criados em runtime
texto.Free;
IdHTTP1.Free;
//Obs: Alguns monitores de registro (ex.: Rising Antivirus)
//costumam bronquear !!
//se deseja testar no seu form, isso faz a data e a hora
//atual aparecerem na barra automática
caption := s;
end;
Por: dataprime
Contato: dataprime@hotmail.com
|