A java.util.Date
objeto es una especie de marca de tiempo - que contiene un número de milisegundos desde el 1 de enero de 1970, 00:00:00 UTC. Por lo tanto, no puede usar un objeto estándar Date
para contener solo un día/mes/año, sin tiempo.
Por lo que sé, no hay una manera realmente fácil de comparar fechas teniendo en cuenta la fecha (y no la hora) en la API estándar de Java. Puede utilizar la clase Calendar
y despejar la hora, minutos, segundos y milisegundos:
Calendar cal = Calendar.getInstance();
cal.clear(Calendar.HOUR_OF_DAY);
cal.clear(Calendar.AM_PM);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);
Hacer lo mismo con otro objeto Calendar
que contiene la fecha que desea comparar, y el uso de los after()
o before()
métodos a hacer la comparación
Como se explica en el Javadoc de java.util.Calendar.clear (campo int):
El HOUR_OF_DAY, HOUR y AM_PM campos se manejan de forma independiente y la resolución se aplica la regla para la hora del día. Al borrar uno de los campos, no se restablece el valor de la hora del día de este calendario. Use set (Calendar.HOUR_OF_DAY, 0) para restablecer el valor de la hora.
editar - La respuesta anterior es de 2010; en Java 8, hay una nueva API de fecha y hora en el paquete java.time
que es mucho más poderosa y útil que las antiguas clases java.util.Date
y java.util.Calendar
. Use las nuevas clases de fecha y hora en lugar de las antiguas.
¿Desea comparar dos fechas para ver si están en el mismo día (ignorando el tiempo), o desea sacar una fecha sin la porción de tiempo? Tengo la impresión de que querías la primera, pero las respuestas parecen pensar que quieres la segunda –
Bueno, primero habla de comparar, y luego da la impresión como un ejemplo para indicar lo que quiere decir sin marca de tiempo, así que estoy adivinando que realmente quiere comparar el tiempo en lugar de imprimirlo, pero si eso es lo que quiere, probablemente no debería haber mencionado imprimirlo ya que eso confunde el problema. –