Coordinando el tiempo

La hora en internet es en ocasiones algo complicado para algunas personas, ya que estan interconectadas personas de practicamente todos los usos horarios que existen. Una manera de normalizar y facilitar la comunicacion es el empleo del Tiempo Universal Coordinado o UTC. 

Crearemos una sencilla aplicacion para visualizar claramente como obtener el UTC desde una amplia red de servidores fiables que usan el Network Time Protocol o NTP, el cual esta vigente desde 1981 y es uno de los mas antiguos protocolos aun activos en Internet: cuando algo funciona perfectamente no es necesario cambiarlo.

La unidad Indy para lazarus incluye un cliente para conectarse a dicha red: TIdSNTP. Lo que haremos es buscar algunos servidores de NTP y contrastarlo con la hora del computador del usuario para verificar si es correcta. Los servidores NTP dan una respuesta en formato DateTime, por lo que es necesario aplicar una funciones para convertirlo en formato TimeUnix.

Time utility


  • Unix Time Server: Es el resultado que nos da el servidor NTP (en este caso, ntp.amnic.net) en formato UNIX (en adelante le llamaremos a este formato timestamp)
  • Local TimeStamp: Es el timestamp que posee el reloj interno de la computadora donde se ejecuta el programa.
  • UTC diference: Es la diferencia de tiempo (en segundos) entre el reloj de la computadora y la hora UTC. La formula es : UTC time = Local time + UTC diference. Se obtiene con la funcion 'GetLocalTimeOffset'.
  • UTC Timestamp: Es el timestamp de la hora UTC; se obtiene de la suma de la hora local y la UTC diference.
  • UTCTime : Es la hora UTC en formato DateTime.
Como se ve, podriamos obtener la hora UTC (sumando la hora local y la diferencia) sin necesidad de consultar a los servidores NTP. Por que entonces incluirlos?

Es una manera de garantizar que a largo plazo, todos los usuarios posean la misma hora y no se vean afectados por pequeñas diferencias de segundos que a la larga podrian representar un grave problema. En cualquier caso, la consulta con un servidor NTP al inicio sera configurable (aunque recomendada).

A continuacion el codigo fuente y los ejecutables compilados de Time Utility.



Comentarios

Entradas populares de este blog

Funcionamiento interno

Como funciona una criptomoneda?

Año nuevo, nuevo nombre