提问人:Bruce Lowe 提问时间:10/16/2014 更新时间:10/16/2014 访问量:47554
比较 Java 8 中的 Date 和 LocalDateTime
Comparing Date and a LocalDateTime in Java 8
问:
我正在使用 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 解决方案。
答:
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
您可以借助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");
}
评论
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()));
评论