java - 如何获得游戏的实时时间

标签 java time ntp

我正在使用 Java 开发游戏。在这个游戏中,实时是非常重要的部分。 出于这个原因,我正在尝试使用 Ntp 获取实时时间。

我在网上找到的就是这段代码。

import java.net.InetAddress;
import java.util.Date;
import org.apache.commons.net.ntp.NTPUDPClient; 
import org.apache.commons.net.ntp.TimeInfo;

public class test{
    public static void main(String args[]) throws Exception{
        String TIME_SERVER = "time-a.nist.gov";   
        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);
    }
}

我的问题是,使用这个,系统仍然在获取 System.currentMillis();因为它实际上会打印出您本地机器收到时间消息的时间。因此,如果玩家将他的桌面时间更改为 future ,游戏时间也会发生变化。

如果有人可以提供帮助以获得实时信息,我将不胜感激。 附言我没有服务器,我的游戏将在 Kongregate 上玩,数据将在玩家的计算机上。

提前致谢。

最佳答案

只需在程序开始时通过 NTP 获取一次时间,然后使用 System.nanoTime() 获取相对时间。它是完全单调的,不会通过系统时间的设置而改变。

关于java - 如何获得游戏的实时时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27604729/

相关文章:

java - 如何获得 Oauth 授权的 Instagram 代码?

java - JOGL:使用 Component.printAll() 在 JFrame 中截取 GLCanvas 的屏幕截图不起作用

python - 如何扩展 Python 识别的时区列表?

android - 使用新的 youtube API 库获取经过的 youtube 视频时间

c - 有没有更简单的方法来获取 char 数组的子字符串并将其转换为 C 中的 long?

linux - 设置 NTP 服务器以允许本地机器为 Linux 同步

java - 如何从内存中流式传输sqlite?

java - processing.org 中的舍入 float

将当前时间与给定时间进行比较

time - NTPD在校正时间上能不能严格一点?