У меня есть объект Даты Java, содержащий информацию о дате и времени. Я хочу записать метод, который отключает информацию времени, усекает мелкие секунды часов, таким образом, я только имею дату в запасе.
Пример ввел:
2008-01-01 13:15:00
Ожидаемый вывод:
2008-01-01 00:00:00
У Вас есть подсказка? Я пытался делать что-то вроде этого:
(timestamp / (24 * 60 * 60 * 1000)) * (24 * 60 * 60 * 1000)
но я столкнулся с проблемами с часовым поясом.
Рекомендуемый способ манипулирования датой / временем - использовать объект Calendar
:
Calendar cal = Calendar.getInstance(); // locale-specific
cal.setTime(dateObject);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
long time = cal.getTimeInMillis();
Используйте метод set ()
класса Calendar , чтобы обнулить поля HOUR_OF_DAY, MINUTE, SECOND
и MILLISECOND
.
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
date = cal.getTime();
Вы смотрели на Joda ? Это намного более простой и интуитивно понятный способ работы с датой и временем. Например, вы можете тривиально конвертировать между (скажем) LocalDateTime и LocalDate объектами.
например (для иллюстрации API)
LocalDate date = new LocalDateTime(milliseconds).toLocalDate()
Кроме того, он решает некоторые проблемы безопасности потоков с датой / time formatters и настоятельно рекомендуется для работы с любыми проблемами даты / времени в Java.
Вы смотрели на метод усечения DateUtils в Apache Commons Lang?
Date truncatedDate = DateUtils.truncate(new Date(), Calendar.DATE);
удалит элемент времени.