Each one of the Date
classes are for specific purposes:
-
If you want to use your Date in an
SQL
/JDBC
context, use thejava.sql.Timestamp
. -
java.util.Date
is the old Java API, it is not thread safe, you can difficultly handle time zoning, and on the top of all, it is poorly designed: one simple uniformity is that months start from 1 while days start from 0. -
java.time.LocalDateTime
is an immutable date-time object that represents a date-time, often viewed as year-month-day-hour-minute-second, which you need exactly. -
java.time.ZonedDateTime
class stores all date and time fields, so you can use it to deal with values like:
27th January 1990 at 15:40.30.123123123 +02:00
in the Europe/Paris time-zone.
To do your task, the ZonedDateTime
class handles conversion from the local time-line of LocalDateTime
to the instant time-line of Instant
(which models a single instantaneous point on the time-line). The difference between the two time-lines, represented by a ZoneOffset
, is the offset from UTC/Greenwich.
To calculate duration and period: there is the java.time.Duration
which is a time-based amount of time, such as ‘20.5 seconds’, and java.time.Period
, which is a date-based amount of time (like: 26 years, 2 months and 2 days).
To get max and min dates, you can use the Java 8 lambdas in something like:
Date maxDate = list.stream().map(yourInstance -> yourInstance.date).max(Date::compareTo).get();
Date minDate = list.stream().map(yourInstance -> yourInstance.date).min(Date::compareTo).get();