O protocolo NTP, ou Network Time Protocol, é utilizado para ajustar relógios de computadores a partir de um servidor de horário remoto. Uma aplicação cliente faz requisições de sincronização a um servidor de horário sendo possível assim ajudar o relógio do computador.
Servidores de NTP normalmente estão conectados a relógio atômicos ou sistemas GPS, portanto fornecem o horário com precisão de alguns milissegundos.
Em Delphi é muito simples desenvolver um cliente para o protocolo NTP e a utilidade desse tipo de aplicação é vasta e clara, manter o horário do computador, de um cadastro ou de algum registro de log com o horário mais correto possível. Isso pode até ter implicações de segurança, já que com relógios sincronizados quaisquer alterações podem ser registradas em diversos locais sem incoerência de horário.
Construindo:
1. Inicie um novo projeto;
2. No novo formulário insira dois TLabels, um TTimer e um TIdTime:
a. Para o TIdTime ajuste a propriedade HOST para pcdsh05.on.br, que é o servidor de hora legal brasileira do Observatório Nacional do Brasil;
b. Para o TTimer ajuste a propriedade ENABLED para TRUE;
3. Clique duas vezes sobre o Timer1 e na PROCEDURE criada automaticamente digite o seguinte código:
{code}
Label1.Caption := DateToStr(IdTime1.DateTime) + ' - ' + TimeToStr(IdTime1.DateTime);
Label2.Caption := IdTime1.Host;
{/code}
Entendendo o código:
Ao ajustarmos a propriedade HOST do TIdTime estamos especificando o servidor que irá fornecer o horário atualizado via protocolo NTP. Alguns servidores nacionais públicos são, por exemplo:
pcdsh05.on.br
ntp.cais.rnp.br
ntp.puc-rio.br
No único trecho de código acionamos o TIdTime obtendo a hora e a data e mostrando a cada segundo os valores em um Label do formulário. No outro mostramos o servidor que estamos usando.
Ao invocar a propriedade DateTime do TIdTime automaticamente ele busca na rede o servidor de horário e obtêm os dados atualizados.
Executando:
Execute seu projeto e aguarde a atualização da data e hora no formulário. Isso deverá acontecer a cada segundo devido às configurações do TTimer.