Как в Java удалить время из даты

Для java.util.Date

Для манипуляции с датами, хранящимися в объектах класса java.util.Date, необходимо использовать класс java.util.Calendar. В нём можно установить в ноли часы, минуты, секунды и миллисекунды той или иной даты/времени, а затем с помощью метода getTime() получить экземпляр java.util.Date. Например:

Date now = new Date();
Calendar calendar = Calendar.getInstance();calendar.setTime(now);
calendar.set(Calendar.HOUR_OF_DAY, 0);calendar.set(Calendar.MINUTE, 0);calendar.set(Calendar.SECOND, 0);calendar.set(Calendar.MILLISECOND, 0);
Date todayNoTime = calendar.getTime();

Этот алгоритм можно упаковать в удобный метод:

public static Date removeTime(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); return calendar.getTime();}

В apache/commons-lang есть класс DateUtils, с помощью которого также очень удобно производить различные манипуляции с java.util.Date, вот числе есть метод, обнуляющий любую часть даты. Например, усечение даты до дня (обнуление времени) выглядит так:

DateUtils.truncate(date, Calendar.DAY_OF_MONTH);

java.time.LocalDateTime

Начиная с версии Java 1.8 в стандартной библиотеке доступны классы java.time.LocalDateTime и java.time.LocalDate. Как и следует из названий первый содержит данные о времени, а второй только дату. Метод LocalDateTime::toLocalDate вернёт новый объект LocalDate с той же датой, что и исходный LocalDateTime, но уже соответственно без времени. Например:

LocalDateTime now = LocalDateTime.now();

LocalDate today = now.toLocalDate();