比较 Java 8 中的 Date 和 LocalDateTime

Comparing Date and a LocalDateTime in Java 8

提问人:Bruce Lowe 提问时间:10/16/2014 更新时间:10/16/2014 访问量:47554

问:

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

所以我写了这段代码:

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

我有一个

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

我将如何比较这两者?

我敢肯定,我可以完全使用日期/日历来完成这项工作,或者引入joda-time。但我更愿意使用更好的 Java 8 解决方案。

爪哇岛

评论

0赞 Basil Bourque 3/26/2017
看类似的问题:将java.util.Date转换为什么“java.time”类型?

答:

20赞 assylias 10/16/2014 #1

新 API 中的 Date 等效项是 Instant:

Instant dbInstant = dbDate.toInstant();

然后,您可以将该时刻与另一个时刻进行比较:

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

评论

0赞 Bruce Lowe 10/16/2014
这看起来和我需要的一模一样。我没有意识到 Instant 比 LocalDateTime 更接近 Date。
1赞 assylias 10/16/2014
@BruceLowe LocalDateTime 并不代表即时,因为今天下午 5 点可能是许多不同的即时,具体取决于您的时区。Date 和 Instant 都表示自纪元以来的毫秒数。
1赞 akash 10/16/2014 #2

您可以借助LocalDateTimeDateInstant

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");
}

评论

0赞 Sven Döring 6/29/2023
前三行可以简化为 Date 。dateFromLocalDT = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());
1赞 DaafVader 10/16/2014 #3

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

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