News & Events
Dica: Pegando data e hora do servidor ou estação
- 3 de junho de 2008
- Posted by: Adriano Santos
- Category: delphi delphi-br delphi2006 delphi2007 dicas lista-delphi
Dica: Pegando data e hora do servidor ou estação
Olá pessoal,
Recentemente o colega Rubem Nascimento me enviou uma dica muito interessante que ajuda muito no dia-a-dia. Trata-se de uma Unit para capturar a data e hora do servidor ou da estação. Eu testei pessoalmente a dica e funciona perfeitamente.
Vamos lá:
Crie uma nova Unit com o nome uLanDateTimeTools.pas, ou com o nome que desejar. O código-fonte completo da Unit segue abaixo:
unit uLanDateTimeTools;
interface
uses
Types, Classes, SysUtils, Windows;
function ServerDateTime(const AServerName: string): TDateTime;
function WorkstationDateTime(const AWorkstationName: string): TDateTime;
implementation
type
PTimeOfDayInfo = ^TTimeOfDayInfo;
TTimeOfDayInfo = packed record
tod_elapsedt: DWORD;
tod_msecs: DWORD;
tod_hours: DWORD;
tod_mins: DWORD;
tod_secs: DWORD;
tod_hunds: DWORD;
tod_timezone: Longint;
tod_tinterval: DWORD;
tod_day: DWORD;
tod_month: DWORD;
tod_year: DWORD;
tod_weekday: DWORD;
end;
NET_API_STATUS = DWORD;
function NetRemoteTOD(UncServerName: LPCWSTR; BufferPtr: PBYTE): NET_API_STATUS; stdcall;
external 'netapi32.dll' Name 'NetRemoteTOD';
function NetApiBufferFree(Buffer: Pointer): NET_API_STATUS; stdcall;
external 'netapi32.dll' Name 'NetApiBufferFree';
function ServerDateTime(const AServerName: string): TDateTime;
const
NERR_SUCCESS = 0;
var
TimeOfDayInfo: PTimeOfDayInfo;
ServerName: array[0..255] of WideChar;
dwRetValue: NET_API_STATUS;
GMTTime: TSystemTime;
CurTime: TDateTime;
begin
StringToWideChar(AServerName, @ServerName, SizeOf(ServerName));
dwRetValue := NetRemoteTOD(@ServerName, PBYTE(@TimeOfDayInfo));
if dwRetValue <> NERR_SUCCESS then
raise Exception.Create(SysErrorMessage(dwRetValue));
with TimeOfDayInfo^ do
begin
FillChar(GMTTime, SizeOf(GMTTime), 0);
with GMTTime do
begin
wYear := tod_year;
wMonth := tod_month;
wDayOfWeek := tod_weekday;
wDay := tod_day;
wHour := tod_hours;
wMinute := tod_mins;
wSecond := tod_secs;
wMilliseconds := tod_hunds;
end;
CurTime := SystemTimeToDateTime(GMTTime);
if tod_timezone <> -1 then
CurTime := CurTime + ((1 / 24 / 60) * -tod_timezone);
Result := CurTime;
end;
NetApiBufferFree(TimeOfDayInfo);
end;
function WorkstationDateTime(const AWorkstationName: string): TDateTime;
begin
Result := ServerDateTime(AWorkstationName)
end;
end.
Note que declaramos duas funções:
function ServerDateTime(const AServerName: string): TDateTime;
function WorkstationDateTime(const AWorkstationName: string): TDateTime;
A primeira, como o próprio nome sugere, traz a data e hora do Servidor e a segunda, consequentemente, a data e hora da estação de trabalho. Ambas precisam do nome da máquina para trazer a informação.
Para utilizar as funções basta indicar o nome da máquina e aguardar o retorno. Veja os exemplos abaixo:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := DateTimeToStr(ServerDateTime('Server'));
Edit2.Text := DateTimeToStr(WorkstationDateTime('Virtua'));
end;
Donwload: http://www.adrianosantos.pro.br/pub/datadoservidor.zip
Adriano Santos
Editor Técnico Revista ClubeDelphi e WebMobile
Siga @tdevrocks no Twitter agora e fique por dentro de todas as atualizações do blog.
Siga também o autor @asrsantos
Bom dia!.
Estava precisando de um procedimento que me retornasse a hora do servidor.
Acabei encontrando ESTE SEU, achei muito útil.
Porém tenho um probleminha… pelo que constatei, seu código só retorna data de um servidor “Windows”.
Teria alguma alteração em que esse procedimento retornasse hora para servidor Linux??
meu e-mail pra resposta é
[ceratto@sgsistemas.com.br]
Desde já agradeço