Data e Hora (problemático!)
Olá pessoal!
Com relação a data e hora, preciso saber duas coisas:
1- Como descobrir a data e a hora local, porém sem ser acessando as configurações do Windows?
Seria a mesma coisa que o Linux faz automaticamente quando conectado à internet por uma Lan de IP fixo (24h/dia), tomando como referência um relógio atômico de um lugar qualquer do mundo.
2- Como gravar em registros do Windows a data e a hora para que eu possa tomá-las como referência em consultas futuras?
Grato.
wbb
Com relação a data e hora, preciso saber duas coisas:
1- Como descobrir a data e a hora local, porém sem ser acessando as configurações do Windows?
Seria a mesma coisa que o Linux faz automaticamente quando conectado à internet por uma Lan de IP fixo (24h/dia), tomando como referência um relógio atômico de um lugar qualquer do mundo.
2- Como gravar em registros do Windows a data e a hora para que eu possa tomá-las como referência em consultas futuras?
Grato.
wbb
Wbb
Curtidas 0
Respostas
Deus
12/12/2003
Bem, o primeiro é bem simples. :) A paleta de componentes [i:67d1b01e5d]IndyClients[/i:67d1b01e5d] já tem um componente que faz isso, que é o [i:67d1b01e5d]IdSNTP[/i:67d1b01e5d], onde SNTP significa [i:67d1b01e5d]Simple Network Time Protocol[/i:67d1b01e5d]. Então, para receber o horário correto, é só você usar o seguinte código em um [i:67d1b01e5d]OnClick[/i:67d1b01e5d] de um botão ou em qualquer outro lugar:
Configure o servidor do IdSNTP1 como [i:67d1b01e5d]time-a.nist.gov[/i:67d1b01e5d], que é um dos servidores de Data/Hora do NIST. Se preferir, clique [url=http://www.boulder.nist.gov/timefreq/service/time-servers.html]aqui[/url] para obter uma lista completa dos servidores. :)
Continuo a mensagem a seguir... abraços, dEUS. ;)
IdSNTP1.Active := True; repeat edit1.Text := FormatDateTime(´dd/mm/yyyy hh:mm:ss´, IdSNTP1.DateTime); Until (IdSNTP1.DateTime <> 0);
Configure o servidor do IdSNTP1 como [i:67d1b01e5d]time-a.nist.gov[/i:67d1b01e5d], que é um dos servidores de Data/Hora do NIST. Se preferir, clique [url=http://www.boulder.nist.gov/timefreq/service/time-servers.html]aqui[/url] para obter uma lista completa dos servidores. :)
Continuo a mensagem a seguir... abraços, dEUS. ;)
GOSTEI 0
Deus
12/12/2003
Bem, continuando: eu criei este código para você poder escrever / ler uma Data/Hora qualquer, usando o registro do windows. Veja esse procedimento e essa função:
Bem, o procedimento [i:9eddae02c3]CriarRegistro[/i:9eddae02c3] é um procedimento que vai, com o parâmetro [i:9eddae02c3]TDateTime[/i:9eddae02c3] que você passar, criar uma entrada no registro do Windows com esses dados. Já [i:9eddae02c3]LerRegistro[/i:9eddae02c3] é uma função que retorna o valor que foi gravado com [i:9eddae02c3]CriarRegistro[/i:9eddae02c3], que você pode guardar numa variável do tipo [i:9eddae02c3]TDateTime[/i:9eddae02c3]. Você usaria da seguinte forma:
O que eu fiz foi criar um registro com a hora atual ([i:9eddae02c3]Now[/i:9eddae02c3]) e resgatar esse valor com a função [i:9eddae02c3]LerRegistro[/i:9eddae02c3].
Espero que seja isso o que você queria!! Abraços, dEUS.
function LerRegistro: TDateTime; var rgRegistro: TRegistry; begin try rgRegistro := TRegistry.Create; with rgRegistro do begin RootKey := HKEY_LOCAL_MACHINE; if OpenKey(´SOFTWARE\DataHora´, False) then Result := ReadDateTime(´HoraData´) else Result := 0; CloseKey; Free; end; except on E: Exception do ShowMessage(´Ocorreu o seguinte erro: ´ + E.Message); end; end; procedure CriarRegistro(DataHora: TDateTime); var rgRegistro: TRegistry; begin try rgRegistro := TRegistry.Create; with rgRegistro do begin RootKey := HKEY_LOCAL_MACHINE; OpenKey(´SOFTWARE\DataHora´, True); WriteDateTime(´HoraData´, DataHora); CloseKey; Free; end; except on E: Exception do ShowMessage(´Ocorreu o seguinte erro: ´ + E.Message); end; end;
Bem, o procedimento [i:9eddae02c3]CriarRegistro[/i:9eddae02c3] é um procedimento que vai, com o parâmetro [i:9eddae02c3]TDateTime[/i:9eddae02c3] que você passar, criar uma entrada no registro do Windows com esses dados. Já [i:9eddae02c3]LerRegistro[/i:9eddae02c3] é uma função que retorna o valor que foi gravado com [i:9eddae02c3]CriarRegistro[/i:9eddae02c3], que você pode guardar numa variável do tipo [i:9eddae02c3]TDateTime[/i:9eddae02c3]. Você usaria da seguinte forma:
CriarRegistro(Now); varHoraData := LerRegistro;
O que eu fiz foi criar um registro com a hora atual ([i:9eddae02c3]Now[/i:9eddae02c3]) e resgatar esse valor com a função [i:9eddae02c3]LerRegistro[/i:9eddae02c3].
Espero que seja isso o que você queria!! Abraços, dEUS.
GOSTEI 0
Wbb
12/12/2003
Valeu mesmo hein!
Era isso mesmo que eu precisava.
O lance de ajuste de horas já está OK e funcionando, conforme sua indicação. Já com relação aos registros eu ainda não testei, mas acredito que não haverá problemas.
Obrigado pela ajuda.
wbb
Era isso mesmo que eu precisava.
O lance de ajuste de horas já está OK e funcionando, conforme sua indicação. Já com relação aos registros eu ainda não testei, mas acredito que não haverá problemas.
Obrigado pela ajuda.
wbb
GOSTEI 0