86. Converting Calendar to LocalDateTime
In Problem 68, you saw that converting a java.util.Date (date) to a LocalTime can be done as follows:
LocalTime lt = date.toInstant().atZone(zoneId).toLocalTime(); In the same manner, we can convert a java.util.Date to a LocalDateTime (here, zoneId was replaced with ZoneId.systemDefault()):
LocalDateTime ldt = date.toInstant().atZone( ZoneId.systemDefault()).toLocalDateTime(); We also know that we can obtain a java.util.Date from a Calendar via the getTime() method. So, by gluing the pieces of the puzzle together, we obtain the following code:
public static LocalDateTime toLocalDateTime(Calendar calendar) { Date date = calendar.getTime(); return date.toInstant().atZone( ZoneId.systemDefault()).toLocalDateTime(); } The same result but following a shorter path can be obtained like this:
return LocalDateTime.ofInstant(Instant.ofEpochMilli( calendar.getTimeInMillis()), ZoneId.systemDefault()); ...