2011-10-16 15 views
11

Eventuali duplicati:
How to compare two Dates without the time portion?Confronto data senza tempo

Come confrontare la data senza il tempo in java?

Date currentDate = new Date();// get current date   
Date eventDate = tempAppointments.get(i).mStartDate; 
int dateMargin = currentDate.compareTo(eventDate); 

questo codice confronta ora e data!

+2

Questa è ancora una volta ripetere di [vecchio post] [1] [1]: http://stackoverflow.com/questions/1439779/how-to-compare-two-dates-without-the -time-portion – Saurabh

+0

@saury: grazie per il link! In qualche modo sapevo che Joda Time avrebbe gestito questo modo in maniera fluida. –

+0

Questo è un argomento interessante poiché ho un requisito simile, ma dovevo fare grandi volumi di confronti con date e, se possibile, senza usare una libreria di terze parti. Di seguito sono riportati i benchmark di base per confrontare le stesse due date utilizzando vari metodi: * Confronta utilizzando getYear deprecato, getMonth e getDate: time = 125ms per 500000 confronta * Confronta utilizzando SimpleDateFormat e Integer.parseInt: time = 719ms per 500000 confronti +475 % * Confronta utilizzando i metodi Calendar.get(): tempo = 2297 ms per 500000 confronti + 1738% * Confronta impostando l'ora a mezzanotte: ora = 2516 ms per 500000 confronti + 1913% –

risposta

34

Prova confrontare le date cambiano 00:00:00 suo tempo (come questa funzione fare):

public static Date getZeroTimeDate(Date fecha) { 
    Date res = fecha; 
    Calendar calendar = Calendar.getInstance(); 

    calendar.setTime(fecha); 
    calendar.set(Calendar.HOUR_OF_DAY, 0); 
    calendar.set(Calendar.MINUTE, 0); 
    calendar.set(Calendar.SECOND, 0); 
    calendar.set(Calendar.MILLISECOND, 0); 

    res = calendar.getTime(); 

    return res; 
} 

Date currentDate = new Date();// get current date   
Date eventDate = tempAppointments.get(i).mStartDate; 
int dateMargin = getZeroTimeDate(currentDate).compareTo(getZeroTimeDate(eventDate)); 
3

È possibile scrivere un metodo Date withoutTime(Date) che restituisce una copia della data in cui tutti i campi di tempo (ora, minuto, secondo, Milli) sono impostati a zero. Quindi puoi confrontare questi.

Oppure è possibile passare a Tempo Joda se possibile. Quella libreria ha già il tipo di dati DateMidnight, che è quello che stai cercando.

1

Scrivi la tua metodo che non tiene il tempo in conto:

public static int compareDate(Date date1, Date date2) { 
    if (date1.getYear() == date2.getYear() && 
     date1.getMonth() == date2.getMonth() && 
     date1.getDate() == date2.getDate()) { 
     return 0 ; 
    } 
    else if (date1.getYear() < date1.getYear() || 
      (date1.getYear() == date2.getYear() && 
       date1.getMonth() < date2.getMonth()) || 
      (date1.getYear() == date2.getYear() && 
       date1.getMonth() == date2.getMonth() && 
       date1.getDate() < date2.getDate()) { 
     return -1 ; 
    } 
    else { 
    return 1 ; 
    } 
} 

Nota che i metodi getYear(), getMonth() e getDate() sono stati deprecati. Dovresti passare attraverso la classe Calendar ed eseguire lo stesso metodo.