【发布时间】:2019-01-29 10:34:33
【问题描述】:
我正在尝试从 NTP 服务器获取时间。我有一种方法,它要求多个服务器获取时间(如果第一个给出结果,则不会要求另一个服务器进行备份)。为了从 InetAddress 中解析日期,我使用了库中的 TimeInfo:commons-net:commons-net:3.0.1。这解决了它应该的时间,但是当我手动更改手机上的时间时,它就成了一个问题。如果我在转换日期时将时间设置为 2019 年 1 月 2 日,则此 NTPUDPClient 将给出此日期,而不是实际的 2019 年 1 月 29 日。即使用户更改手机上的时间,我也想将此时间转换为实际日期。
尝试搜索如何使用其他组件解析此 InetAddress,但找不到任何内容。
public Date getCurrentTimeFromNtpServer() {
Date result = null;
NTPUDPClient client = new NTPUDPClient();
client.setDefaultTimeout(2000);
for (String host : NTP_SERVERS) {
try {
InetAddress inetAddress = InetAddress.getByName(host);
TimeInfo timeInfo = client.getTime(inetAddress);
result = DateUtil.toUtc(new Date(timeInfo.getReturnTime()));
break;
} catch (IOException e) {
Logger.warn(TAG, "Failed to get current time MTP", e);
}
}
client.close();
return result;
}
【问题讨论】:
-
我在打开 NTPUDPClient 时发现的是,在该方法中创建了一个 TimeStamp 对象:TimeStamp now = TimeStamp.getCurrentTime();结果,他正在利用这段时间。我真的不知道为什么我要问这个服务器最终结果是来自电话的时间。