在Android中获取实时 - 不是设备设置时间

时间:2013-04-04 10:11:01

标签: android datetime real-time time-format

如何查找 Real Geographical Time ,就像在我的应用程序中一样,我希望将实时附加到我的应用程序中。

因此,如果用户在他的设备中更改时间,那么我应该只获得真实的时间 - 而不是设备时间

我的问题很混乱,但试着用简单的语言理解 -

我不想要设备时间,我想在任何时刻获得真正的预备时间

2 个答案:

答案 0 :(得分:9)

您需要使用NTP(网络时间协议)协议:

以下是我在其他地方找到的一些代码......我正在使用它。这使用Apache Commons库,可以使用Gradle安装(在commons-net:commons-net:3.6上添加依赖项)

如果您需要时间服务器列表,请检查:http://tf.nist.gov/service/time-servers.html

以下是您可以使用的一些Java代码:

public class TimeLookup {
    public static final String TIME_SERVER = "time-a.nist.gov";

    public static void main(String[] args) throws Exception {
        NTPUDPClient timeClient = new NTPUDPClient();
        InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
        TimeInfo timeInfo = timeClient.getTime(inetAddress);
        long returnTime = timeInfo.getReturnTime();
        Date time = new Date(returnTime);
        System.out.println("Time from " + TIME_SERVER + ": " + time);
    }

}

注意Android代码必须在后台线程上运行并包含gradle依赖:

implementation 'commons-net:commons-net:3.6'

答案 1 :(得分:4)

没有Android API可以帮助您获得这样的时间。用户可以随时更改设备时间,无需执行任何操作。

您最好的选择是运行带有Web服务的服务器,您可以从中获得时间。由于您控制服务器,因此可以尝试确保它返回正确的时间。