我有一个用于设置Java 8将来/过去日期的解决方案,但是我想知道是否有更清洁的方法。
我有一种方法,其中一个参数的类型为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
在Joda中,这很简单:
setCurrentMillisSystem(long)
在我们访问new DateTime()
的任何地方都会给出日期设置。
Java 8中有更干净的方法吗?
答案 0 :(得分:1)
void setFuturePastDate(ZonedDateTime dateTime) {
Clock clock = Clock.fixed(dateTime.toInstant(), ZoneId.systemDefault());
System.out.println(ZonedDateTime.now(clock)); // - I have a past date
}
此方法将打印出与我传入的相同的ZonedDateTime
(只要它具有默认区域)。
答案 1 :(得分:0)
如果我对你的理解正确,这就是你想要的:
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()
周围的dateTime。例如:过去5天变成未来5天。