import java.time.Duration;
import java.time.Instant;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main
(String args
[]) { String strDateTime
= "2016-01-24T16:00:00.000Z"; Instant then = Instant.parse(strDateTime);
Instant now = Instant.now();
Duration duration = Duration.between(then, now);
// ####################################Java-8####################################
String formatted
= String.
format("%d days %02d hours %02d minutes %02d seconds %02d milliseconds ago",
duration.toDays(), duration.toHours() % 24, duration.toMinutes() % 60, duration.toSeconds() % 60,
TimeUnit.MILLISECONDS.convert(duration.toNanos() % 1000_000_000, TimeUnit.NANOSECONDS));
System.
out.
println(formatted
); // ##############################################################################
// ####################################Java-9####################################
formatted
= String.
format("%d days %02d hours %02d minutes %02d seconds %02d milliseconds ago",
duration.toDaysPart(), duration.toHoursPart(), duration.toMinutesPart(), duration.toSecondsPart(),
TimeUnit.MILLISECONDS.convert(duration.toNanosPart(), TimeUnit.NANOSECONDS));
System.
out.
println(formatted
); // ####################################Java-9####################################
}
}
aW1wb3J0IGphdmEudGltZS5EdXJhdGlvbjsKaW1wb3J0IGphdmEudGltZS5JbnN0YW50OwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CgpwdWJsaWMgY2xhc3MgTWFpbiB7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CgkJU3RyaW5nIHN0ckRhdGVUaW1lID0gIjIwMTYtMDEtMjRUMTY6MDA6MDAuMDAwWiI7CgkJSW5zdGFudCB0aGVuID0gSW5zdGFudC5wYXJzZShzdHJEYXRlVGltZSk7CgkJSW5zdGFudCBub3cgPSBJbnN0YW50Lm5vdygpOwoJCUR1cmF0aW9uIGR1cmF0aW9uID0gRHVyYXRpb24uYmV0d2Vlbih0aGVuLCBub3cpOwoJCVN5c3RlbS5vdXQucHJpbnRsbihkdXJhdGlvbik7CgoJCS8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI0phdmEtOCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJCVN0cmluZyBmb3JtYXR0ZWQgPSBTdHJpbmcuZm9ybWF0KCIlZCBkYXlzICUwMmQgaG91cnMgJTAyZCBtaW51dGVzICUwMmQgc2Vjb25kcyAlMDJkIG1pbGxpc2Vjb25kcyBhZ28iLAoJCQkJZHVyYXRpb24udG9EYXlzKCksIGR1cmF0aW9uLnRvSG91cnMoKSAlIDI0LCBkdXJhdGlvbi50b01pbnV0ZXMoKSAlIDYwLCBkdXJhdGlvbi50b1NlY29uZHMoKSAlIDYwLAoJCQkJVGltZVVuaXQuTUlMTElTRUNPTkRTLmNvbnZlcnQoZHVyYXRpb24udG9OYW5vcygpICUgMTAwMF8wMDBfMDAwLCBUaW1lVW5pdC5OQU5PU0VDT05EUykpOwoJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZWQpOwoJCS8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCQkvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNKYXZhLTkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCQlmb3JtYXR0ZWQgPSBTdHJpbmcuZm9ybWF0KCIlZCBkYXlzICUwMmQgaG91cnMgJTAyZCBtaW51dGVzICUwMmQgc2Vjb25kcyAlMDJkIG1pbGxpc2Vjb25kcyBhZ28iLAoJCQkJZHVyYXRpb24udG9EYXlzUGFydCgpLCBkdXJhdGlvbi50b0hvdXJzUGFydCgpLCBkdXJhdGlvbi50b01pbnV0ZXNQYXJ0KCksIGR1cmF0aW9uLnRvU2Vjb25kc1BhcnQoKSwKCQkJCVRpbWVVbml0Lk1JTExJU0VDT05EUy5jb252ZXJ0KGR1cmF0aW9uLnRvTmFub3NQYXJ0KCksIFRpbWVVbml0Lk5BTk9TRUNPTkRTKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKGZvcm1hdHRlZCk7CgkJLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjSmF2YS05IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgl9Cn0K