我正在使用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()的值,因为它实际上打印了你的本地机器接收到时间信息的时间。因此,如果玩家将桌面时间改为未来,游戏时间也会随之改变。
如果有人能够帮忙解决这个问题,让我得到真正的时间,我将不胜感激。顺便说一句,我没有服务器,我的游戏将在Kongregate上运行,并且数据将保存在玩家的计算机上。
提前感谢您的帮助。
getReturnTime
不会给你服务器时间,它只会给你 本地机器接收到消息数据包的时间。(根据 javadoc)。 - M. DeinumgetDelay()
和getOffset()
方法是用来做什么的? - user3458