在Java 8中比较日期和LocalDateTime

时间:2014-10-16 10:02:00

标签: java

我正在使用Java 8并查询正在返回java.util.Date对象的Mongo数据库。我现在想检查该项目是否在过去30天内。我尝试使用新的时间API使代码更新到更新。

所以我写了这段代码:

java.time.LocalDateTime aMonthAgo = LocalDateTime.now().minusDays(30)

我有一个

java.util.Date dbDate = item.get("t")

我如何比较这两个?

我确信我可以完全使用Dates / Calendars完成这项工作,或者介绍joda-time。但我更喜欢使用更好的Java 8解决方案。

3 个答案:

答案 0 :(得分:19)

新API中的Date相当于Instant:

Instant dbInstant = dbDate.toInstant();

然后您可以将该瞬间与另一个瞬间进行比较:

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

答案 1 :(得分:1)

您可以在LocalDateTime

的帮助下将Date转换为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");
}

答案 2 :(得分:1)

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

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