这有效(返回0):
ChronoUnit.SECONDS.between(
LocalDateTime.now(),
LocalDateTime.now());
这失败了:
ChronoUnit.SECONDS.between(
ZonedDateTime.ofInstant(new Date().toInstant(), ZoneId.of("UTC"),
LocalDateTime.now());
有这个例外:
Exception in thread "main" java.time.DateTimeException: Unable to obtain ZonedDateTime from TemporalAccessor: 2016-10-27T14:05:37.617 of type java.time.LocalDateTime
...
Caused by: java.time.DateTimeException: Unable to obtain ZoneId from TemporalAccessor: 2016-10-27T14:05:37.617 of type java.time.LocalDateTime
at java.time.ZoneId.from(ZoneId.java:466)
at java.time.ZonedDateTime.from(ZonedDateTime.java:553)
... 3 more
有没有人知道如何在ChronoUnit.between()中使用java.util.Date?
答案 0 :(得分:3)
ChronoUnit.between方法的文档说:
计算此单位的金额。起点和终点作为临时对象提供,并且必须是兼容类型。在计算金额之前,实现将第二种类型转换为第一种类型的实例。
它正在尝试将LocalDateTime
转换为ZonedDateTime
。 LocalDateTime
没有区域信息并导致错误。
如果您使用ZonedDateTime作为第二个参数,它可以正常工作:
ChronoUnit.SECONDS.between(ZonedDateTime.ofInstant(new Date().toInstant(), ZoneId.of("UTC")), ZonedDateTime.now())
答案 1 :(得分:3)
LocalDateTime没有时区。没有办法将它与Instant或ZonedDateTime进行比较,它们代表了确切的时间点。
由于您的问题是关于比较日期,最简单的方法是将Instant与Instant比较:
long seconds = ChronoUnit.SECONDS.between(
new Date().toInstant(),
Instant.now());