在 Java 8 中设置 past/future 日期的最简单方法
Easiest way to set past/future date in Java 8
我有一个设置 future/past 日期 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 中有更简洁的方法吗?
void setFuturePastDate(ZonedDateTime dateTime) {
Clock clock = Clock.fixed(dateTime.toInstant(), ZoneId.systemDefault());
System.out.println(ZonedDateTime.now(clock)); // - I have a past date
}
此方法打印出与我传入的相同的 ZonedDateTime
(前提是它具有默认区域)。
如果我没理解错的话,这就是你想要的:
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 天。
我有一个设置 future/past 日期 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 中有更简洁的方法吗?
void setFuturePastDate(ZonedDateTime dateTime) {
Clock clock = Clock.fixed(dateTime.toInstant(), ZoneId.systemDefault());
System.out.println(ZonedDateTime.now(clock)); // - I have a past date
}
此方法打印出与我传入的相同的 ZonedDateTime
(前提是它具有默认区域)。
如果我没理解错的话,这就是你想要的:
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 天。