Duration duration = Duration.between(LocalDateTime.now(), localDateTime);为什么结果不对
时间: 2023-06-26 07:04:49 浏览: 109
`.between()`方法计算的是两个时间点之间的时长,并不考虑日期。因此,你需要使用`Duration.between()`方法的参数都是`Instant`类型的,而不是`LocalDateTime`类型的。
你可以将`LocalDateTime`转换为`Instant`,然后再计算时长。例如:
```
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
Duration duration = Duration.between(Instant.now(), instant);
```
这样计算出来的`duration`表示的是当前时间和`localDateTime`之间的时长。如果想要反过来计算,即`localDateTime`到当前时间的时长,只需要交换`Instant`对象的顺序即可:
```
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
Duration duration = Duration.between(instant, Instant.now());
```
相关问题
Duration duration = Duration.between(LocalDateTime.now(), localDateTime);为什么会出错
这个代码可能会出错的原因是因为`LocalDateTime`没有时区信息,而`Duration`需要两个带有时区信息的时间点才能计算时间差。正确的做法是将`LocalDateTime`转换为带有时区信息的`ZonedDateTime`或者`OffsetDateTime`,例如:
```
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
Duration duration = Duration.between(now, zonedDateTime);
```
或者:
```
OffsetDateTime now = OffsetDateTime.now();
OffsetDateTime offsetDateTime = localDateTime.atOffset(ZoneOffset.ofHours(8));
Duration duration = Duration.between(now, offsetDateTime);
```
这样就可以避免出现错误了。
Duration duration = Duration.between(LocalDateTime.now(), localDateTime);这是怎么比较的
这行代码是使用Java 8中的Duration类来计算两个LocalDateTime对象之间的时间差。它通过使用静态方法between()来获取两个时间点之间的Duration实例,然后可以使用toXXX()方法将其转换为所需的时间单位。在这里,我们使用now()方法获取当前时间,然后将其与另一个LocalDateTime对象进行比较,得到时间间隔。
阅读全文