2011-10-16 21 views
11

Duplicar posible:
How to compare two Dates without the time portion?fecha sin tiempo

cómo comparar la fecha sin tiempo en Java?

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

este código compara la fecha y la hora.

+2

Esto es de nuevo repetidas de [antiguo puesto] [1] [1]: http://stackoverflow.com/questions/1439779/how-to-compare-two-dates-without-the -time-portion – Saurabh

+0

@saury: ¡gracias por el enlace! De algún modo, sabía que a Joda Time se lo manejaría sin problemas. –

+0

Este es un tema interesante ya que tengo un requisito similar, pero tuve que hacer grandes volúmenes de comparaciones de fechas, y sin utilizar una biblioteca de terceros si es posible. A continuación se muestran los puntos de referencia básicos para comparar las mismas dos fechas usando varios métodos: * Comparar usando obsoletos getYear, getMonth, y getDate: time = 125ms para 500000 comparaciones * Comparar usando SimpleDateFormat y Integer.parseInt: time = 719ms para 500000 compara +475 % * Comparar utilizando los métodos Calendar.get(): time = 2297ms para 500000 comparadas + 1738% * Comparar configurando la hora a la medianoche: time = 2516ms para 500000 compares + 1913% –

Respuesta

34

Intenta comparar los cambios de fechas en 00:00:00 su tiempo (como hacer esta función):

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

Puede escribir un método Date withoutTime(Date) que devuelve una copia de la fecha en la que todos los campos de tiempo (hora, minuto, segundo, mili) se ponen a cero. Entonces puedes comparar estos.

O puede cambiar a Joda Time si es posible. Esa biblioteca ya tiene el tipo de datos DateMidnight, que es lo que está buscando.

1

Escriba su propio método que no se toman el tiempo en cuenta:

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 ; 
    } 
} 

Tenga en cuenta que los métodos getYear(), getMonth()getDate() y han quedado obsoletos. Debería pasar por la clase Calendar y realizar el mismo método.

Cuestiones relacionadas