在Java8中比较Date和LocalDateTime

在Java8中比较Date和LocalDateTime,java,Java,我正在使用Java 8并查询一个Mongo数据库,该数据库返回一个Java.util.Date对象。我现在要检查该项目是否在过去30天内。我正试图使用新的时间API使代码更新得更及时 因此,我编写了以下代码: java.time.LocalDateTime aMonthAgo = LocalDateTime.now().minusDays(30) 我有一个 java.util.Date dbDate = item.get("t") 我将如何比较这两个 我相信我可以完全用日期/日历来完成这项工

我正在使用Java 8并查询一个Mongo数据库,该数据库返回一个Java.util.Date对象。我现在要检查该项目是否在过去30天内。我正试图使用新的时间API使代码更新得更及时

因此,我编写了以下代码:

java.time.LocalDateTime aMonthAgo = LocalDateTime.now().minusDays(30)
我有一个

java.util.Date dbDate = item.get("t")
我将如何比较这两个


我相信我可以完全用日期/日历来完成这项工作,或者介绍joda time。但我更愿意使用更好的Java8解决方案

新API中的日期等价于即时:

Instant dbInstant = dbDate.toInstant();
然后,您可以将该瞬间与另一瞬间进行比较:

Instant aMonthAgo = ZonedDateTime.now().minusDays(30).toInstant();
boolean withinLast30Days = dbInstant.isAfter(aMonthAgo);

通过
Instant

Date currentDate=new Date();
LocalDateTime localDateTime = LocalDateTime.ofInstant(currentDate.toInstant(), ZoneId.systemDefault());
Date dateFromLocalDT = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

if(dateFromLocalDT.compareTo(yourDate)==0){
    System.out.println("SAME");
}

只需将java.util.Date转换为LocalDateTime

aMonthAgo.compareTo( LocalDateTime.ofInstant(dbDate.toInstant(), ZoneId.systemDefault()));

这看起来正是我需要的。我不知道这个瞬间比LocalDateTime更接近日期。@BruceLowe LocalDateTime不代表瞬间,因为今天下午5点可能会有许多不同的瞬间,这取决于你所在的时区。Date和Instant都表示自历元以来的毫秒数。请参见类似问题: