2014-10-16 63 views
8

我正在使用Java 8並查詢正在返回java.util.Date對象的Mongo數據庫。我現在要檢查該物品是否在最近30天內。我正在嘗試使用新的時間API來使代碼更新至今。在Java 8中比較Date和LocalDateTime

所以我寫了這個代碼:

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

,我有一個

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

我將如何比較這2?

我敢肯定,我可以完全使用日期/日曆來完成這項工作,或引入焦點時間。但我更喜歡使用更好的Java 8解決方案。

+0

查看類似的問題:[轉換java.util.Date什麼「java.time」型?](http://stackoverflow.com/q/36639154/642706) – 2017-03-26 02:06:18

回答

13

日期的新API中的等價物是即時:

Instant dbInstant = dbDate.toInstant(); 

然後,您可以比較的是即時與其他即時:

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

這個長相酷似我需要什麼。我沒有意識到Instant比LocalDateTime更接近Date。 – 2014-10-16 10:17:57

+1

@BruceLowe LocalDateTime並不代表瞬間,因爲今天下午5點可能會有許多不同的時刻,這取決於您的時區。 Date和Instant都代表自紀元以來的毫秒數。 – assylias 2014-10-16 10:34:01

1

您可以通過Instant幫助轉換LocalDateTimeDate

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

只是轉換你的java.util.Date到LocalDateTime。

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