Similar to Getting a current quarter in Java this example takes it a step further. It uses Guava RangeMap and contains three methods getQuarter, getQuarterBeginDate and getQuarterEndDate.
Setup
private RangeMap<Date, Integer> quarters = TreeRangeMap.create();
private Date dateToCompare;
Class
public CurrentQuarterGuava (Date date) {
checkNotNull(date);
this.dateToCompare = date;
// create a JODA current time instance
DateTime currentDate = new DateTime(dateToCompare);
// set quarters
DateTime q1BeginDate = new DateTime(currentDate.getYear(), 1, 1, 0, 0, 0, 0);
DateTime q1EndDate = new DateTime(currentDate.getYear(), 3, 31, 0, 0, 0, 0);
DateTime q2BeginDate = new DateTime(currentDate.getYear(), 4, 1, 0, 0, 0, 0);
DateTime q2EndDate = new DateTime(currentDate.getYear(), 6, 30, 0, 0, 0, 0);
DateTime q3BeginDate = new DateTime(currentDate.getYear(), 7, 1, 0, 0, 0, 0);
DateTime q3EndDate = new DateTime(currentDate.getYear(), 9, 30, 0, 0, 0, 0);
DateTime q4BeginDate = new DateTime(currentDate.getYear(), 10, 1, 0, 0, 0, 0);
DateTime q4EndDate = new DateTime(currentDate.getYear(), 12, 31, 0, 0, 0, 0);
//add to quarters
quarters.put(Range.closed(q1BeginDate.toDate(), q1EndDate.toDate()), 1);
quarters.put(Range.closed(q2BeginDate.toDate(), q2EndDate.toDate()), 2);
quarters.put(Range.closed(q3BeginDate.toDate(), q3EndDate.toDate()), 3);
quarters.put(Range.closed(q4BeginDate.toDate(), q4EndDate.toDate()), 4);
}
Get Quarter
/**
* Method should return a integer representing
* the quarter in which the quarter date is in.
*
* @return integer
*/
public Integer getQuarter () {
return quarters.get(dateToCompare);
}
Get Quarter Begin Date
/**
* Method should return the quarter begin date
*
* @return Date
*/
public Date getQuarterBeginDate () {
Entry<Range<Date>, Integer> quarterAsDate = quarters.getEntry(dateToCompare);
Range<Date> range = quarterAsDate.getKey();
return range.lowerEndpoint();
}
Get Quarter End Date
/**
* Method should return the quarter end date
*
* @return Date
*/
public Date getQuarterEndDate () {
Entry<Range<Date>, Integer> quarterAsDate = quarters.getEntry(dateToCompare);
Range<Date> range = quarterAsDate.getKey();
return range.upperEndpoint();
}
Unit tests
Current quarter test
@Test
public void current_quarter () {
DateTime firstQuarterCheck = new DateTime(2013, 1, 15, 0, 0, 0, 0);
CurrentQuarterGuava currentQuarterWithGuava =
new CurrentQuarterGuava(firstQuarterCheck.toDate());
assertEquals(new Integer(1),
currentQuarterWithGuava.getQuarter());
}
Current quarter begin test
@Test
public void current_quarter_begin_date () {
DateTime firstQuarterCheck = new DateTime(2013, 1, 15, 0, 0, 0, 0);
CurrentQuarterGuava currentQuarterWithGuava =
new CurrentQuarterGuava(firstQuarterCheck.toDate());
assertEquals(quarterBeginDate.toDate(),
currentQuarterWithGuava.getQuarterBeginDate());
}
Current quarter end test
@Test
public void current_quarter_end_date () {
DateTime firstQuarterCheck = new DateTime(2013, 1, 15, 0, 0, 0, 0);
CurrentQuarterGuava currentQuarterWithGuava =
new CurrentQuarterGuava(firstQuarterCheck.toDate());
assertEquals(quarterEndDate.toDate(),
currentQuarterWithGuava.getQuarterEndDate());
}