30

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

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

我的问题很混乱,但尝试用一种简单的语言来理解 -

我不想要 DEVICE TIME,我想要随时都有 REAL PREVAILING TIME

4

2 回答 2

12

您需要使用 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'
于 2013-04-04T10:39:23.493 回答
5

没有 Android API 可以为您提供这样的时间。用户可以随时更改设备时间,对此您无能为力。

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

于 2013-04-04T10:13:29.637 回答