java - 删除 Java 应用程序中对操作系统的时间和日期依赖

标签 java

您是否遇到过这样的场景:

需要测试软件的一些与日期相关的功能,该软件依赖操作系统来获取当前日期,因此我们必须更改操作系统的日期,但日期和时间实际上是任何操作系统中的关键服务,更改日期和时间操作系统的时间可能会引起问题,例如某些应用服务器会检查最后修改日期来决定是否重新编译JSP文件。

是否有任何聪明的方法来处理此类问题,例如在 JVM 级别或应用程序级别设置日期和时间?

最佳答案

如果您使用Java 8和java.time的类,您可以使用Clock 。在正常的应用程序运行时,您可以注入(inject)并使用由 Clock.systemDefaultZone() 提供的正常系统时钟,对于测试,您可以注入(inject)具有固定时间的 Clock 实例,例如 Clock.fixed 提供或者如果您需要更多控制,则对 Clock 进行子类化。

然后您需要将代码更改为:

// Inject this value somehow, eg using Spring
private Clock clock;

public LocalDateTime methodThatGeneratesTime() {
    return LocalDateTime.now(clock); // Instead of just LocalDateTime.now()
}

关于java - 删除 Java 应用程序中对操作系统的时间和日期依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41407292/

相关文章:

java - Android Activity 在服务准备好之前访问服务的静态引用

java - 绘制输入输出交换的函数图

java - 扫描仪 Try Catch 语句导致 java.util.InputMismatchException

java - 如何从 JAR 库中了解 android 语言

java - 如何在 Java 中更改 HTTP 响应中的字符集编码

java - 从哪里获取我的小程序的可信证书?

java - 顺序写入文件与批量写入文件

java - 如何在 Java 中将 OpenLayers DrawFeature 与 Selenium WebDriver 一起使用(双击问题)?

Java:从方法调用返回两个整数

java - 通过 CDI 动态注入(inject)实例