A java.util.Date
объект является своего рода отметкой времени - она содержит количество миллисекунд с 1 января 1970 года, 00:00:00 UTC. Таким образом, вы не можете использовать стандартный Date
объект, содержащий только день / месяц / год без времени.
Насколько я знаю, нет действительно простого способа сравнить даты, принимая во внимание только дату (а не время) в стандартном Java API. Вы можете использовать класс Calendar
и очистить часы, минуты, секунды и миллисекунды:
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);
Сделайте то же самое с другим объектом Calendar
, который содержит дату, с которой вы хотите сравнить ее, и используйте методы after()
или before()
для сравнения.
Как объяснено в Javadoc java.util.Calendar.clear (int field) :
Поля HOUR_OF_DAY , HOUR и AM_PM обрабатываются независимо, и применяется правило разрешения для времени суток. Очистка одного из полей не сбрасывает значение часа в календаре. Используйте set (Calendar.HOUR_OF_DAY, 0) для сброса значения часа.
edit - Ответ выше с 2010 года; в Java 8 есть новый API даты и времени в пакете java.time
, который намного более мощный и полезный, чем старые классы java.util.Date
и java.util.Calendar
. Используйте новые классы даты и времени вместо старых.