【问题标题】:Getting time from ntp server without allowing the user to manipulate the time从 ntp 服务器获取时间而不允许用户操纵时间
【发布时间】: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();结果,他正在利用这段时间。我真的不知道为什么我要问这个服务器最终结果是来自电话的时间。

标签: android date ntp


【解决方案1】:

我终于找到了答案。网上很多例子都不对。应该做的是:

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 中创建的时间,它是电话时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    相关资源
    最近更新 更多