如何在Java中确保当前本地时间是正确的?

如何在Java中确保当前本地时间是正确的?,java,time,Java,Time,我需要确保在我的客户机应用程序中,用户不会显著更改机器日期(例如,将机器日期改为1个月之前) 据我所知,用Java检查当前时间的最佳方法是 System.currentTimeInMillis() 在多平台环境(Windows、Linux、Mac等)中,如何确保这是正确的日期 无法连接到远程服务器,也无法连接到internet。此外,在启动时,时间可能已经被篡改。我只需要检查内部业务逻辑的时间,而不是设置任何东西 解决方案与java无关。常见的解决方案是使用NTP服务器,并将系统/操作系统配置

我需要确保在我的客户机应用程序中,用户不会显著更改机器日期(例如,将机器日期改为1个月之前)

据我所知,用Java检查当前时间的最佳方法是

System.currentTimeInMillis()
在多平台环境(Windows、Linux、Mac等)中,如何确保这是正确的日期


无法连接到远程服务器,也无法连接到internet。此外,在启动时,时间可能已经被篡改。我只需要检查内部业务逻辑的时间,而不是设置任何东西

解决方案与java无关。常见的解决方案是使用NTP服务器,并将系统/操作系统配置为始终与NTP远程服务器同步时间。NTP还用于同步集群中服务器的时钟。有关详细信息,如果这是出于“演示期”的目的,并且您担心用户可能不允许NTP请求(或关闭Internet访问),您可以咨询

,因为您运气不好。您可以尝试检测篡改时间的线索(如将来创建的文件,或在比上一次运行记录的完成时间更早的时间启动应用程序),也可以测量使用时间而不是使用期限(也就是说,你可以给用户12小时的应用时间,而不是30天的免费使用时间,不管他们如何分解),因为你可以自信地衡量在应用程序中花费的时间

或者,你可以信任你的用户。有些可能是盗版,但盗版通常是一件方便的事情,大多数人不会为了使用你的软件而改变时钟。(当然,这只适用于某些应用程序;例如,如果是银行或簿记应用程序,你不想信任用户。)

无线电时钟 通过USB连接获取当前时间的输出,该时间由连接到时间标准(如原子钟)的无线电发射机发送的时间码同步。类似地,GPS信号接收器也可以捕获当前时间

至少,这家公司提供了

日晷 将a放置在窗口外。将a连接到相关计算机。将网络摄像头放置在窗口中。编写应用程序,根据日晷的当前图像解释一天中的时间。警告:西雅图不适用

黑匣子,无输入=不通过 更严重的是,如果你不信任系统时间,你无法访问时间服务器,你无法向用户询问当前时间,我无法想象任何解决方案。你有一个没有输入的系统。通过USB的无线电时钟正在添加这样的输入


Wikipedia有一篇关于的文章。

有很多方法。其中之一可能是在每次应用程序启动时存储当前数据,或者时不时更新数据。如果你的应用程序连接到某个远程服务器,请比较服务器和应用程序时间。你将如何使用这些信息?Java没有用于设置系统时间的API。你可以(大概)使用和“us.pool.ntp.org”(如果您不确定用户的国家代码,则仅使用“pool.ntp.org”)。谢谢大家,对您的答案有一些评论。没有可用的远程服务器连接,也没有互联网连接。此外,在启动时,时间可能已经被篡改。我只需要检查时间,以用于内部业务逻辑,而不是设置任何内容。如果您没有与外部信息源通信的方式(例如Internet上的服务器),则无法验证系统时间是否正确,因为无法确定实时时间。您的程序完全依赖于主机操作系统提供的信息。我无法连接到远程服务器,也无法假设具有Internet连接。如果发生在网络环境中,您可以配置您是运行NTP服务器的服务器/计算机之一。并使网络中的所有其他计算机将其时钟与服务器同步。不幸的是,我在一个完全封闭的环境中运行,与elseThank you@amadan无关,您对如何安全存储我的计算机计算的应用程序时间信息有何线索应用程序?我想你应该问另一个问题…我不,我从来没有必要问。正如@FerdinandNeman所说,问另一个问题。而且它可能非常依赖操作系统。