作为解决方法,我需要更改某个 Java 程序的系统时钟,而不触及代码才能获取:
calendar.getinstance().get(calendar.year) = 2013
是否可以仅通过启动配置设置变量?
谢谢
编辑:抱歉,我想将当前年份模拟为 2013
最佳答案
首先,如果没有管理员权限,则无法在操作系统级别设置系统时钟。这也会影响机器上运行的所有软件。但您只想为一个程序更改时钟。因此,当您拒绝设置系统时钟的此选项时,那么任何类型的代码更改都是必要的(您不想要的)。您无法仅通过配置属性来伪造系统时间而不更改任何代码。
其次,模拟 java.util.Date (编写子类)的想法可能对您有用,尽管它需要更改代码。看到这个有趣的link使用仪器。
第三,Java 8 中的新 JSR-310 有一个特殊的类 java.time.Clock
,它允许注入(inject)到现有代码中并可以模拟假时钟。该解决方案的优点是:一旦您以这种方式准备好程序,那么您以后确实可以通过配置来更改时钟。但至少有一次您需要更改初始代码。
关于Java-Fake 系统时钟启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20898378/