Java NTP客户端

我需要我的软件与NTP服务器通信以确定本地时钟偏移。 我尝试过使用org.apache.commons.net.ntp包,但在Windows上运行时,由于使用System.currentTimeMillis()来确定NTP包交换之前和之后的时间,所以它的实现相当差。 您可能会也可能不知道,只有当系统时钟滴答时才会更新此值,而在大多数现代Win2k3服务器上,这个值是64Hz或每15.625ms。 这大大限制了时钟偏移计算的准确性。

Ntpd使用CPU高频定时器在系统时钟周期之间进行插值,并且实现更高的parsing时间。 你知道使用这个或类似的技术的Java实现吗? 或者你知道除Apache之外的其他NTP实现吗?

support.ntp.org上有一个NTP Java实现

由于这个问题在谷歌“Java NTP客户端”上排名很高:

Android有一个简单的NTP客户端: android.net.SntpClient 。

它需要被修改为在非Android java上运行,但这应该是微不足道的,因为代码是大约100行代码加上另外100行的详细注释,除了Android系统时钟之外没有任何外部依赖它已经准备好接受像nanoTime()这样的相对定时器,因为它已经使用了这样一个相对定时器。

如果您使用Java 5或更高版本,是否可以使用System.nanoTime()来更精确地测量时间偏移? 你必须修改你现有的NTP代码,但你应该有它的来源,我不希望这是困难的。

我写了一个Java实现(Java 7),您可以使用: SntpClient