/** * Obtains an instance of {@code LocalDateTime} from a temporal object. * <p> * This obtains a local date-time based on the specified temporal. * A {@code TemporalAccessor} represents an arbitrary set of date and time information, * which this factory converts to an instance of {@code LocalDateTime}. * <p> * The conversion extracts and combines the {@code LocalDate} and the * {@code LocalTime} from the temporal object. * Implementations are permitted to perform optimizations such as accessing * those fields that are equivalent to the relevant objects. * <p> * This method matches the signature of the functional interface {@link TemporalQuery} * allowing it to be used as a query via method reference, {@code LocalDateTime::from}. * * @param TemporalAccessor $temporal the temporal object to convert, not null * @return LocalDateTime the local date-time, not null * @throws DateTimeException if unable to convert to a {@code LocalDateTime} */ public static function from(TemporalAccessor $temporal) { if ($temporal instanceof LocalDateTime) { return $temporal; } else { if ($temporal instanceof ZonedDateTime) { return $temporal->toLocalDateTime(); } else { if ($temporal instanceof OffsetDateTime) { return $temporal->toLocalDateTime(); } } } try { $date = LocalDate::from($temporal); $time = LocalTime::from($temporal); return new LocalDateTime($date, $time); } catch (DateTimeException $ex) { throw new DateTimeException("Unable to obtain LocalDateTime from TemporalAccessor: " . $temporal . " of type " . get_class($temporal), $ex); } }