package ntp;
import java.net.InetAddress;
import java.util.logging.Logger;
import org.apache.commons.net.ntp.NTPUDPClient;
import org.apache.commons.net.ntp.TimeInfo;
public final class NTP
{
private static final long TIME_TILL_UPDATE = 1000*60*10;
private static final String NTP_SERVER = "pool.ntp.org";
private static long lastUpdate = 0;
private static long offset = 0;
public static long getTime()
{
//CHECK IF OFFSET NEEDS TO BE UPDATED
if(System.currentTimeMillis() > lastUpdate + TIME_TILL_UPDATE)
{
updateOffSet();
lastUpdate = System.currentTimeMillis();
//LOG OFFSET
Logger.getGlobal().info("Adjusting time with " + offset + " milliseconds.");
}
//CALCULATE CORRECTED TIME
return System.currentTimeMillis() + offset;
}
private static void updateOffSet()
{
//CREATE CLIENT
NTPUDPClient client = new NTPUDPClient();
//SET TIMEOUT
client.setDefaultTimeout(10000);
try
{
//OPEN CLIENT
client.open();
//GET INFO FROM NTP SERVER
InetAddress hostAddr = InetAddress.getByName(NTP_SERVER);
TimeInfo info = client.getTime(hostAddr);
info.computeDetails();
//UPDATE OFFSET
if(info.getOffset() != null)
{
offset = info.getOffset();
}
}
catch (Exception e)
{
//ERROR GETTING OFFSET
}
client.close();
}
}