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());
// 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);
// 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
); }
}
aW1wb3J0IGphdmEudGltZS5EdXJhdGlvbjsKaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOwppbXBvcnQgamF2YS50aW1lLlBlcmlvZDsKaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXI7CmltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIERhdGVUaW1lRm9ybWF0dGVyIGR0ZiA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybigidS1NLWQgSDptOnMuU1NTIiwgTG9jYWxlLkVOR0xJU0gpOwogICAgICAgIExvY2FsRGF0ZVRpbWUgc3RhcnQgPSBMb2NhbERhdGVUaW1lLnBhcnNlKCIyMDIwLTA2LTE1IDE2OjIxOjAwLjAwMCIsIGR0Zik7CiAgICAgICAgTG9jYWxEYXRlVGltZSBlbmQgPSBMb2NhbERhdGVUaW1lLnBhcnNlKCIyMDIxLTEwLTI3IDAwOjAwOjAwLjAwMCIsIGR0Zik7CgogICAgICAgIFBlcmlvZCBwZXJpb2QgPSBQZXJpb2QuYmV0d2VlbihzdGFydC50b0xvY2FsRGF0ZSgpLCBlbmQudG9Mb2NhbERhdGUoKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBlcmlvZCk7CiAgICAgICAgLy8gQ3VzdG9tIGZvcm1hdAogICAgICAgIFN0cmluZyBlbGFwc2VkUGVyaW9kID0gU3RyaW5nLmZvcm1hdCgiJWQgeWVhcnMgJWQgbW9udGhzICVkIGRheXMiLCBwZXJpb2QuZ2V0WWVhcnMoKSwgcGVyaW9kLmdldE1vbnRocygpLAogICAgICAgICAgICAgICAgcGVyaW9kLmdldERheXMoKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGVsYXBzZWRQZXJpb2QpOwoKICAgICAgICBEdXJhdGlvbiBkdXJhdGlvbiA9IER1cmF0aW9uLmJldHdlZW4oc3RhcnQsIGVuZCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGR1cmF0aW9uKTsKICAgICAgICAvLyBDdXN0b20gZm9ybWF0CiAgICAgICAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjSmF2YS04IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgICAgU3RyaW5nIGZvcm1hdHRlZEVsYXBzZWRUaW1lID0gU3RyaW5nLmZvcm1hdCgiJWQgaG91cnMgJWQgbWludXRlcyAlZCBzZWNvbmRzIiwgZHVyYXRpb24udG9Ib3VycygpICUgMjQsCiAgICAgICAgICAgICAgICBkdXJhdGlvbi50b01pbnV0ZXMoKSAlIDYwLCBkdXJhdGlvbi50b1NlY29uZHMoKSAlIDYwKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZm9ybWF0dGVkRWxhcHNlZFRpbWUpOwogICAgICAgIC8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKICAgICAgICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNKYXZhLTkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICAgICBmb3JtYXR0ZWRFbGFwc2VkVGltZSA9IFN0cmluZy5mb3JtYXQoIiVkIGhvdXJzICVkIG1pbnV0ZXMgJWQgc2Vjb25kcyIsIGR1cmF0aW9uLnRvSG91cnNQYXJ0KCksCiAgICAgICAgICAgICAgICBkdXJhdGlvbi50b01pbnV0ZXNQYXJ0KCksIGR1cmF0aW9uLnRvU2Vjb25kc1BhcnQoKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGZvcm1hdHRlZEVsYXBzZWRUaW1lKTsKICAgICAgICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGVsYXBzZWRQZXJpb2QgKyAiICIgKyBmb3JtYXR0ZWRFbGFwc2VkVGltZSk7CiAgICB9Cn0=