Period, Duration and Instant are three different classes introduced since Java 8 to help us deal better with time.
- Period measures the time with days granularity. In other words, there are no hours, minutes, nor seconds. Example:
Period threeDaysPeriod = Period.ofDays(3); System.out.println(threeDaysPeriod.getDays()); // prints 3
There are also methods ofDays, ofMonths and so on. It’s noteworthy to mention that you cannot convert automatically a period of 365 days to 12 months:
Period threeDaysPeriod = Period.ofDays(365); System.out.println(threeDaysPeriod.getMonths()); // prints 0
- Duration is similar to Period but with mcuh finer granularity of up to nanoseconds. Example:
Duration oneDay = Duration.ofDays(1); System.out.println(oneDay.getSeconds()); // prints 86400
Note: you cannot mix Period and Duration so the following is not allowed:
Period oneDay = Period.ofDays(1); Duration twentyFourHours = Duration.ofDays(1); twentyFourHours.compareTo(oneDay); //Cannot compile
- Instant is for marking the current moment with granularity of up to nanoseconds. It is useful for various tasks such as measuring performance, e.g.:
Instant beginning = Instant.now(); Thread.sleep(1000); // wait one second Instant end = Instant.now(); Duration duration = Duration.between(beginning, end); System.out.printf("It took %d second(s).", duration.getSeconds()); // prints It took 1 second(s).
The above three classes make your life easier and the code cleaner.