74. Getting the first and last day of a quarter
Let’s assume that we represent the first and last day of a quarter via this simple class:
public final class Quarter {
private final Date firstDay;
private final Date lastDay;
...
}
Next, we have a java.util.Date
and we want the first and the last day of the quarter containing this date. For this, we can use JDK 8’s IsoFields.DAY_OF_QUARTER
(we introduced IsoFields
in the previous problem). But, before we can use IsoFields
, we have to convert the given java.util.Date
to a LocalDate
as follows:
LocalDate localDate = date.toInstant()
.atZone(ZoneId.systemDefault()).toLocalDate();
Once we have the given Date
as a LocalDate
, we can easily extract the first day of the quarter via IsoFields.DAY_OF_QUARTER
. Next, we add 2 months to this day to move into the last month of the quarter (a quarter has 3 months, so a year has 4 quarters) and we rely on java.time.temporal.TemporalAdjusters
, more precisely on...