A. `Period.of(0, 0, 45).normalized()` returns a period of 1 month and 15 days
normalized() only rolls months into years and never touches the days field, so Period.of(0, 0, 45).normalized() stays P45D, not 1 month and 15 days.
B. `Duration.between(LocalDate.of(2026, 1, 1), LocalDate.of(2026, 1, 5))` compiles, but throws at runtime because LocalDate supports no time-based unitsCorrect answer
Duration.between accepts any Temporal so it compiles, but it measures in seconds/nanos, which LocalDate does not support, so it throws UnsupportedTemporalTypeException at run time.
C. `Period.ofMonths(1).get(ChronoUnit.DAYS)` returns 30, because a month is normalized to 30 days
A Period stores its three fields independently and converts nothing, so get(ChronoUnit.DAYS) reads the days field (0 here), not a 30-day-month equivalent.
D. Adding `Duration.ofDays(1)` to a ZonedDateTime the day before a spring-forward transition gives a different local time than adding `Period.ofDays(1)`Correct answer
Duration.ofDays(1) adds exactly 86400 seconds on the instant timeline while Period.ofDays(1) keeps the wall-clock time, so across a spring-forward transition the two land on different local times.
Explanation
Why `Duration.between(LocalDate.of(2026, 1, 1), LocalDate.of(2026, 1, 5))` compiles, but throws...` is correct: `Duration.between` takes two `Temporal` arguments, so any `Temporal` type type-checks. At runtime it measures the gap in SECONDS/NANOS, and `LocalDate` supports neither, so it throws `UnsupportedTemporalTypeException: Unsupported unit: Seconds`.
Why `Adding \`Duration.ofDays(1)\` to a ZonedDateTime the day before a spring-forward...` is correct: a `Duration` is an exact amount of elapsed time (24 hours = 86400 seconds) added on the instant timeline, while a `Period` of 1 day is a calendar amount added to the local date, keeping the wall-clock time. From 2026-03-07T12:00-05:00[America/New_York], the Duration lands on 2026-03-08T13:00-04:00 (the clocks moved forward an hour during those 86400 seconds) and the Period lands on 2026-03-08T12:00-04:00. Same start, one hour apart.
Why the others are wrong:
`Period.of(0, 0, 45).normalized()` returns a period of 1 month and 15 days` — `normalized()` only rolls months into years (it splits total months by 12). Days are never touched, because the number of days in a month is not fixed. `Period.of(0, 0, 45).normalized()` is still `P45D` and `getMonths()` is 0.
`Period.ofMonths(1).get(ChronoUnit.DAYS)` returns 30...` — a `Period` stores its three fields independently and converts nothing. `get(ChronoUnit.DAYS)` reads the days field, which is 0 here; there is no 30-day month assumption anywhere in `Period`.
Exam tip: `Period` is date-based (years/months/days, calendar-aware, DST-aware when added to a zoned value); `Duration` is time-based (seconds/nanos, exact elapsed time). The reverse trap also shows up: `LocalDate.of(2026, 1, 1).plus(Duration.ofDays(1))` compiles as well, and throws the same `UnsupportedTemporalTypeException: Unsupported unit: Seconds`.