Более чистый способ - использовать Joda Time для начала, где существуют отдельные понятия LocalDate, LocalTime, LocalDateTime, DateTime, Instant и т. Д.
Вы можете переводить между типами java.util.Date и Joda, но я бы посоветовал вам придерживаться Joda для максимально возможного количества кода и переводить только тогда, когда вам действительно нужно .
Извините, если вы надеялись избежать дополнительной библиотеки - но Joda , поэтому намного лучше, чем встроенный API, стоит потратить деньги на IMO. Обратите внимание, что в типах Java вам нужно определить, какой часовой пояс вас интересует - java.util.Date определяет момент времени, который может происходить в три разные даты по всему миру в зависимости от вашего часового пояса. .