Les traigo una pequeña mejora del código de mqm, que permite pasarle el UTC que queramos. Por tanto, independientemente de la fecha, hora y región que tenga el equipo desde el que se ejecuta la aplicación, nos dará siempre la fecha-hora de Internet correcta:
Código Delphi
[-]function TPPRUEBAS.LeerFechaHoraInternet(UTC: Integer): string;
var
Https: TIdHTTP;
SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
Respuesta: string;
UnixTicks: Int64;
FechaHora: TDateTime;
begin
Result := FormatDateTime('yyyy-mm-dd"T"hh:nn:ss"Z"', Now); try
SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
SSLHandler.SSLOptions.SSLVersions := [sslvTLSv1_2]; SSLHandler.SSLOptions.Mode := sslmClient;
Https := TIdHTTP.Create(nil);
Https.IOHandler := SSLHandler;
Https.Request.Accept := 'text/html';
Https.Request.UserAgent := 'Mozilla/5.0 (compatible; Delphi)';
Https.ConnectTimeout := 5000; Https.ReadTimeout := 5000; try
Respuesta := Https.Get('https://www2.roa.es/cgi-bin/horautc'); UnixTicks := StrToInt64(Trim(Respuesta)); FechaHora := UnixToDateTime(UnixTicks div 1000); FechaHora := IncHour(FechaHora, UTC); Result := FormatDateTime('yyyy-mm-dd"T"hh:nn:ss"Z"', FechaHora); Consola.Lines.Add('Fecha-hora de internet sincronizada correctamente.');
except
on E: Exception do
begin
Result := FormatDateTime('yyyy-mm-dd"T"hh:nn:ss"Z"', Now);
Consola.Lines.Add('No se pudo sincronizar la fecha-hora de internet. Se muestra la fecha-hora del equipo.');
end;
end;
finally
If Assigned(Https) Then Https.Free;
If Assigned(SSLHandler) Then SSLHandler.Free;
end;
end;