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?