2014-10-16 10 views
8

Sto utilizzando Java 8 e sto interrogando un database Mongo che restituisce un oggetto java.util.Date. Ora voglio verificare che l'oggetto sia negli ultimi 30 giorni. Sto tentando di utilizzare la nuova API del tempo per rendere il codice più aggiornato fino ad oggi.Confronto di data e LocalDateTime in Java 8

Così ho scritto questo codice:

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

e ho un

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

Come potrei confrontare questi 2?

Sono sicuro che potrei semplicemente lavorare con date/calendari completamente per fare il lavoro, o introdurre joda-time. Ma preferirei andare con una soluzione Java 8 più bella.

+0

vedi domanda simile: [Converti java.util.Date a quale tipo “java.time”?] (Http://stackoverflow.com/q/36639154/642706) –

risposta

13

L'equivalente della data nella nuova API è immediato:

Instant dbInstant = dbDate.toInstant(); 

si può quindi confrontare quell'istante con un altro istante:

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

Questo appare esattamente come quello che mi serve . Non avevo realizzato che Instant fosse più vicino alla data di un LocalDateTime. –

+1

@BruceLowe a LocalDateTime non rappresenta un istante perché oggi alle 17:00 potrebbero essere molti istanti diversi a seconda del fuso orario. Sia Data che Instant rappresentano un numero di millisecondi dall'epoca. – assylias

1

È possibile convertire LocalDateTime al Date con l'aiuto di 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

Basta convertire il tuo java.util.Date a LocalDateTime.

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