import java.time.Duration;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("u-M-d H:m:s.SSS", Locale.ENGLISH);
        LocalDateTime start = LocalDateTime.parse("2020-06-15 16:21:00.000", dtf);
        LocalDateTime end = LocalDateTime.parse("2021-10-27 00:00:00.000", dtf);

        Period period = Period.between(start.toLocalDate(), end.toLocalDate());
        System.out.println(period);
        // Custom format
        String elapsedPeriod = String.format("%d years %d months %d days", period.getYears(), period.getMonths(),
                period.getDays());
        System.out.println(elapsedPeriod);

        Duration duration = Duration.between(start, end);
        System.out.println(duration);
        // Custom format
        // ####################################Java-8####################################
        String formattedElapsedTime = String.format("%d hours %d minutes %d seconds", duration.toHours() % 24,
                duration.toMinutes() % 60, duration.toSeconds() % 60);
        System.out.println(formattedElapsedTime);
        // ##############################################################################

        // ####################################Java-9####################################
        formattedElapsedTime = String.format("%d hours %d minutes %d seconds", duration.toHoursPart(),
                duration.toMinutesPart(), duration.toSecondsPart());
        System.out.println(formattedElapsedTime);
        // ##############################################################################

        System.out.println(elapsedPeriod + " " + formattedElapsedTime);
    }
}