我终于找到了答案。网上有太多不正确的例子。应该做的是:
public Date getCurrentTimeFromNtpServer() {
Date result = null;
final NTPUDPClient client = new NTPUDPClient();
client.setDefaultTimeout(2000);
for (final String host : NTP_SERVERS) {
try {
final InetAddress inetAddress = InetAddress.getByName(host);
final TimeInfo timeInfo = client.getTime(inetAddress);
final Long time = timeInfo.getMessage().getTransmitTimeStamp().getTime();
result = DateUtil.toUtc(time);
SystemUtil.sleep(500);
break;
} catch (IOException e) {
Logger.warn(TAG, "Failed to get current time NTP", e);
}
}
client.close();
return result;
}
这将给出实际时间,而不是在NTPUDPClient中创建的时间,这是电话时间。