Current quarter query

This example uses a custom TemporalQuery to find the quarter of year for a given date. Implementing the TemporalQuery interface with the queryFrom(TemporalAccessor) method allows for a way to extract information from a temporal object. The queryFrom method compares the passed-in date against the ChronoField.MONTHOFYEAR then returning the appropriate quarter of year.

Note: This example is purely for demonstration as the java 8 time api provides YearMonth.from(temporal).get(IsoFields.QUARTER_OF_YEAR) to get the current quarter of year.

Setup

public class CurrentQuarterQuery implements TemporalQuery<Integer> {

    /* 
     * (non-Javadoc)
     * @see java.time.temporal.TemporalQuery#queryFrom(java.time.temporal.TemporalAccessor)
     */
    @Override
    public Integer queryFrom(TemporalAccessor date) {
        
        int month = date.get(ChronoField.MONTH_OF_YEAR);
        
        if (month <= Month.MARCH.getValue()) {
            return new Integer(1);
        } else if (month <= Month.JUNE.getValue()) {
            return new Integer(2);
        } else if (month <= Month.SEPTEMBER.getValue()) {
            return new Integer(3);
        } else {
            return new Integer(4);
        }
    }
}

First quarter

@Test
public void validate_first_quarter () {
    
    LocalDate date = LocalDate.of(2014, Month.MARCH, 4); 

    Integer quarter = date.query(new CurrentQuarterQuery());
    
    assertEquals(new Integer(1), quarter);
}

Second quarter

@Test
public void validate_second_quarter () {
    
    LocalDate date = LocalDate.of(2014, Month.MAY, 8); 

    Integer quarter = date.query(new CurrentQuarterQuery());
    
    assertEquals(new Integer(2), quarter);
}

Third quarter

@Test
public void validate_third_quarter () {
    
    LocalDate date = LocalDate.of(2014, Month.SEPTEMBER, 2); 

    Integer quarter = date.query(new CurrentQuarterQuery());
    
    assertEquals(new Integer(3), quarter);
}

Fourth quarter

@Test
public void validate_fourth_quarter () {
    
    LocalDate date = LocalDate.of(2014, Month.DECEMBER, 18); 

    Integer quarter = date.query(new CurrentQuarterQuery());
    
    assertEquals(new Integer(4), quarter);
}