代码之家  ›  专栏  ›  技术社区  ›  f.trajkovski

从ntp服务器获取时间而不允许用户操纵时间

  •  0
  • f.trajkovski  · 技术社区  · 6 年前

    尝试搜索如何使用其他组件解析此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;
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   f.trajkovski    6 年前

    我终于找到了答案。网上有太多不正确的例子。应该做的是:

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

    推荐文章