答案 1
最接近的是物体。您可以使用所需的任何时间(或从系统当前时间)创建 Clock 对象。所有 date.time 对象都有重载方法,这些方法将时钟对象替换为当前时间。因此,您可以使用依赖关系注入来注入具有特定时间的时钟:Clock
now
public class MyBean {
private Clock clock; // dependency inject
...
public void process(LocalDate eventDate) {
if (eventDate.isBefore(LocalDate.now(clock)) {
...
}
}
}
有关更多详细信息,请参阅时钟 JavaDoc
答案 2
我使用了一个新类来隐藏创建并简化测试:Clock.fixed
public class TimeMachine {
private static Clock clock = Clock.systemDefaultZone();
private static ZoneId zoneId = ZoneId.systemDefault();
public static LocalDateTime now() {
return LocalDateTime.now(getClock());
}
public static void useFixedClockAt(LocalDateTime date){
clock = Clock.fixed(date.atZone(zoneId).toInstant(), zoneId);
}
public static void useSystemDefaultZoneClock(){
clock = Clock.systemDefaultZone();
}
private static Clock getClock() {
return clock ;
}
}
public class MyClass {
public void doSomethingWithTime() {
LocalDateTime now = TimeMachine.now();
...
}
}
@Test
public void test() {
LocalDateTime twoWeeksAgo = LocalDateTime.now().minusWeeks(2);
MyClass myClass = new MyClass();
TimeMachine.useFixedClockAt(twoWeeksAgo);
myClass.doSomethingWithTime();
TimeMachine.useSystemDefaultZoneClock();
myClass.doSomethingWithTime();
...
}
推荐
-
-
解析日期格式时的 Java 时区tl;博士国际标准化组织 ISO 8601避免旧的日期时间类使用 java.time关于 java.time 我有解析日期的代码,如下所示: 它工作正常,突然间,它停止工作了。事实证明,管理员在服务器上进行了一些配置更改,并且日期当前返回为“2010-12-27T10:50:44.000-08:00”,上述模式无
-
Java 8 - 将 LocalDate 转换为 OffsetDateTime 我想知道是否可以在Java 8中从LocalDate转换为OffsetDateTime。 例如,假设我得到了这个LocalDate: 假设我们知道时区,例如美国/圣地亚哥。
-
在java中将iso8601日期转换为unix时间戳tl;博士java.time城大时间Unix Timestamp关于 java.time 我有一个日期字符串 如何将上述字符串转换为unix时间戳?谢谢
-
如何使用 DateTimeFormatter 解析非标准月份名称 我需要解析以下列形式的(德语)日期: 但是,模式和模式都不符合缩短的日期。当然,我可以使用以下模式来匹配缩短的月份,但是我无法匹配3和4个字符的月份。我知道我可以有两个格式