2014-10-16 24 views
8

Tôi đang sử dụng Java 8 và truy vấn cơ sở dữ liệu Mongo đang trả về một đối tượng java.util.Date. Bây giờ tôi muốn kiểm tra xem mục đó có nằm trong vòng 30 ngày qua không. Tôi đang cố gắng sử dụng API thời gian mới để làm cho mã cập nhật nhiều hơn cho đến nay.So sánh ngày và LocalDateTime trong Java 8

Vì vậy, tôi đã viết mã này:

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

và tôi có một

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

Làm thế nào tôi có thể so sánh các 2?

Tôi chắc chắn tôi chỉ có thể làm việc hoàn toàn Ngày/Lịch để thực hiện công việc hoặc giới thiệu thời gian joda. Nhưng tôi muốn đi với một giải pháp Java 8 đẹp hơn.

+0

Xem Câu hỏi tương tự: [Convert java.util.Date với những gì “java.time” loại?] (Http://stackoverflow.com/q/36639154/642706) –

Trả lời

13

Tương đương với ngày trong API mới là tức thì:

Instant dbInstant = dbDate.toInstant(); 

Sau đó bạn có thể so sánh khoảnh khắc đó với liền khác:

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

này trông giống hệt như những gì tôi cần . Tôi đã không nhận ra Instant gần với Date hơn là LocalDateTime. –

+1

@BruceLowe LocalDateTime không đại diện ngay lập tức vì hôm nay lúc 5 giờ chiều có thể có nhiều phiên bản khác nhau tùy thuộc vào múi giờ của bạn. Cả Date và Instant đại diện cho một số mili giây kể từ thời đại. – assylias

1

Bạn có thể chuyển đổi LocalDateTime để Date bởi sự giúp đỡ của 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"); 
} 
1

Chỉ cần chuyển đổi java.util.Date của bạn để LocalDateTime.

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