There are five ways to create a Period class:
Period annually = Period.ofYears(1); // every 1 year
Period quarterly = Period.ofMonths(3); // every 3 months
Period everyThreeWeeks = Period.ofWeeks(3); // every 3 weeks
Period everyOtherDay = Period.ofDays(2); // every 2 days
Period everyYearAndAWeek = Period.of(1, 0, 7); // every year and 7 days
There's one catch. You cannot chain methods when creating a Period.
The following code looks like it is equivalent to the everyYearAndAWeek example, but it's not. Only the last method is used because the Period.ofXXX methods are static methods.
Period wrong = Period.ofYears(1).ofWeeks(1); // every week
of() method allows us to pass in the number of years, months, and days.
They are all included in the same period.
Period is a day or more of time while Duration is for smaller units of time.
For Duration, you can specify the number of days, hours, minutes, seconds, or nanoseconds.
Let's look at some code:
3: LocalDate date = LocalDate.of(2015, 1, 20); 4: LocalTime time = LocalTime.of(6, 15); 5: LocalDateTime dateTime = LocalDateTime.of(date, time); 6: Period period = Period.ofMonths(1); 7: System.out.println(date.plus(period)); // 2015-02-20 8: System.out.println(dateTime.plus(period)); // 2015-02-20T06:15 9: System.out.println(time.plus(period)); // UnsupportedTemporalTypeException
Last time tries to add a month to an object that only has a time. This won't work. Java throws an exception and complains the Unsupported unit: Months.