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

我需要确保在我的客户端应用程序中用户不会显着改变机器日期(例如,将它带到1个月之前)。

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

System.currentTimeInMillis() 

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

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

无线电时钟

获得具有USB连接的无线电时钟 ,用于通过连接到诸如primefaces钟的时间标准的无线电发射器发送的时间码同步的当前时间的输出。 类似地,GPS信号的接收器也可以捕获时间信号 。

至少, Meinberg Global公司提供了几种这样的设备 。

通过USB设备的几个无线电时钟的照片

将日su放在窗户外面。 将网络摄像头连接到相关计算机。 将网络摄像头放在窗口中。 编写一个应用程序来解释日历当前图像的时间。

日规的照片在一个垫座的在庭院里

黑匣子,没有输入=没有去

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

维基百科有一篇关于时钟同步的文章。

如果这是为了“演示期”的目的,并且您担心用户可能会禁止NTP请求(或关闭Internet访问),那么您就不走运了。 您可能会尝试检测篡改时间的线索(例如将来创建的文件,或者在早于上一次运行的记录完成时间之前启动应用程序),或者您可以测量使用时间而不是使用时间(即,不是给用户30天的免费使用,你可以给他们12小时的申请时间,但是他们会分解它们,因为你可以自信地测量你的应用程序内部花费的时间。

或者,您可以信任您的用户。 有些人可能是海盗,但盗版往往是方便的,大多数人都不会为了能够使用你的软件而改变时钟。 (当然,这仅适用于某些应用程序;例如,如果用户是银行或簿记应用程序,则不希望信任用户。)

解决方案与java无关。 对此的常见解决方案是使用NTP服务器,并将系统/ OS配置为始终与NTP远程服务器同步其时间。 NTP还用于同步集群中服务器的时钟。 有关更多信息,请访问http://www.ntp.org/ntpfaq/NTP-s-def.htm