Given a java.util.Date object how do I go about finding what Quarter it's in?
Assuming Q1 = Jan Feb Mar, Q2 = Apr, May, Jun, etc.
Given a java.util.Date object how do I go about finding what Quarter it's in?
Assuming Q1 = Jan Feb Mar, Q2 = Apr, May, Jun, etc.
Since Java 8, the quarter is accessible as a field using classes in the java.time package.
import java.time.LocalDate;
import java.time.temporal.IsoFields;
LocalDate myLocal = LocalDate.now();
quarter = myLocal.get(IsoFields.QUARTER_OF_YEAR);
In older versions of Java, you could use:
import java.util.Date;
Date myDate = new Date();
int quarter = (myDate.getMonth() / 3) + 1;
Be warned, though that getMonth was deprecated early on:
As of JDK version 1.1, replaced by Calendar.get(Calendar.MONTH).
Instead you could use a Calendar object like this:
import java.util.Calendar;
import java.util.GregorianCalendar;
Calendar myCal = new GregorianCalendar();
int quarter = (myCal.get(Calendar.MONTH) / 3) + 1;
You are going to have to write your own code because the term "Quarter" is different for each business. Can't you just do something like:
Calendar c = /* get from somewhere */
int month = c.get(Calendar.MONTH);
return (month >= Calendar.JANUARY && month <= Calendar.MARCH) ? "Q1" :
(month >= Calendar.APRIL && month <= Calendar.JUNE) ? "Q2" :
(month >= Calendar.JULY && month <= Calendar.SEPTEMBER) ? "Q3" :
"Q4";
Since quarters are a localized (Western) concept, specify a Locale rather than using the platform default:
Calendar cal = Calendar.getInstance(Locale.US);
/* Consider whether you need to set the calendar's timezone. */
cal.setTime(date);
int month = cal.get(Calendar.MONTH); /* 0 through 11 */
int quarter = (month / 3) + 1;
This will avoid getting the thirteenth month (Calendar.UNDECIMBER) on non-Western calendars, and any skew caused by their shorter months.
JFreeChart has a Quarter class. If you're curious, check out the javadoc. The source is also available from SourceForge if you want to check out the implementation.
Good solutions here, but remember that quarters can be subject to change depending on company/industry too. Sometimes a quarter can be a different 3 months.
You probably want to extend or encapsulate the calendar class to customize it to your tasks rather than write some utility function that converts it. Your application is probably complex enough in that area that you will find other uses for your new calendar class--I promise you'll be glad you extended or encapsulated it even if it seems silly now.
I use this method.
public static Integer getQuarter(Date d){
Calendar c = Calendar.getInstance();
c.setTime(d);
int month = c.get(Calendar.MONTH);
return (month /3)+1;
}