在Java8中设置过去/未来日期的最简单方法

在Java8中设置过去/未来日期的最简单方法,java,java-8,zoneddatetime,Java,Java 8,Zoneddatetime,我有一个设置未来/过去日期Java8的解决方案,但我想知道是否有更干净的方法。 我有一个方法,其中一个参数的类型为ZonedDateTime 我提取时间,转换成毫秒,然后从现在开始减去 void setFuturePastDate(ZonedDateTime dateTime) { long diffInSeconds = ZonedDateTime.now().toEpochSecond() - dateTime.toEpochSecond(); Durati

我有一个设置未来/过去日期Java8的解决方案,但我想知道是否有更干净的方法。 我有一个方法,其中一个参数的类型为
ZonedDateTime

我提取时间,转换成毫秒,然后从现在开始减去

void setFuturePastDate(ZonedDateTime dateTime) {
    long diffInSeconds = ZonedDateTime.now().toEpochSecond() 
        - dateTime.toEpochSecond();
    Duration durationInSeconds = Duration.ofSeconds(diffInSeconds);
    Instant instantInSeconds = now.minusSeconds(durationInSeconds); 
    Clock clock = Clock.fixed(instantInSeconds, ZoneId.systemDefault());
    System.out.println(ZonedDateTime.now(clock)); // - I have a past date 
在乔达,情况很简单:

setCurrentMillisSystem(long)
无论我们在哪里访问
newdatetime()
它都会给出日期集

Java8中有没有更干净的方法

void setFuturePastDate(ZonedDateTime dateTime) {
    Clock clock = Clock.fixed(dateTime.toInstant(), ZoneId.systemDefault());
    System.out.println(ZonedDateTime.now(clock)); // - I have a past date 
}

此方法打印与我传入的相同的
ZoneDateTime
(前提是它具有默认区域)。

如果我理解正确,这就是您想要的:

void setFuturePastDate(LocalDateTime dateTime){
    final LocalDateTime now = LocalDateTime.now();
    final Duration duration = Duration.between(now, dateTime);
    final LocalDateTime mirrored;
    if(duration.isNegative()){
        mirrored = now.minus(duration);
    } else {
        mirrored = now.plus(duration);
    }

    System.out.println(mirrored);
}

这反映了
now()
周围的日期时间。例如:过去的5天变成了未来的5天。

很抱歉,我会记住的。奥列耶斯接受了答案,最佳方式。。。。。