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);
		System.out.println(duration);

		// ####################################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####################################
	}
}
