69. Converting between Date and YearMonth
Converting a java.util.Date
to JDK 8 java.time.YearMonth
can be done based on YearMonth.from(TemporalAccessor temporal)
. A TemporalAccessor
is an interface (more precisely, a framework-level interface) that exposes read-only access to any temporal object including date, time, and offset (a combination of these is also allowed). So, if we convert the given java.util.Date
to java.time.LocalDate
, then the result of the conversion can be passed to YearMonth.from()
as follows:
public static YearMonth toYearMonth(Date date) {
return YearMonth.from(date.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate());
}
Vice versa can be obtained via Date.from(Instant instant)
as follows:
public static Date toDate(YearMonth ym) {
return Date.from(ym.atDay(1).atStartOfDay(
ZoneId.systemDefault()).toInstant());
}
Well, that was easy, wasn’t it?